自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (1)
  • 收藏
  • 关注

原创 GCD全解析

GCD英文全称:Grand Central Dispatch 翻译就是 宏大的中央调度,是苹果开发的一种支持并行操作的机制,基于C语言,提供了非常多强大的函数在了解GCD并使用之前,必须要掌握四个名词:串行,并发,同步,异步。

2024-05-28 18:43:15 739

原创 浅谈设计模式

在整个应用程序中,共享一份资源。保证在程序运行过程中,一个类只有一个实例,而且该实例只提供一个全局访问点供外界访问,从而方便控制实例个数,节约系统资源。:是一种将方法调用封装为对象的设计模式,在iOS中具体实现为NSInvocation。:其本质上是一种发布-订阅模型,用来消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作。:通过对象组合创建抽象产品,可以创建多系列产品,必须修改父类的接口才能支持新的产品。:通过类继承创建抽象产品,创建一种产品,子类化创建者并重载工厂方法以创建新产品。

2023-03-19 11:57:36 81

原创 1. 分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员?

分类

2023-02-25 20:21:30 280

原创 IQKeyboardManager 在iOS11导航栏消失的问题

问题原因:IQKeyboardManager 在获取当前顶层控制器的时候获取到了tabBarController

2022-07-21 15:43:25 267

原创 地图缩放

NSArray *annotations = mapView.annotations;// [self.manager.mapView showAnnotations:annotations edgePadding:UIEdgeInsetsMake(100, 20, 54,81) animated:animated]; NSInteger count = [mapView.annotations count]; if ( count == 0) { return; }...

2021-05-12 15:25:06 195

转载 好用app开屏广告组件XHLaunchAd -支持静态/动态图片广告/mp4视频广告

特性:1.支持静态/动态图片广告.2.支持mp4视频广告.3.支持全屏/半屏广告.4.支持网络及本地资源.5.兼容iPhone和iPad.6.支持广告点击事件.7.支持自定义跳过按钮,添加子视图.8.支持设置数据等待时间.9.自带图片/视频下载,缓存功能.10.支持预缓存图片及视频.11.支持设置完成动画.12.支持清除指定资源缓存.13.支持LaunchImage 和 LaunchScreen.storyboard.14.等等等…使用方法1.在didFinishLaunch

2021-03-30 15:03:46 1149

原创 iOS时间格式化输出技巧

一.前言最近项目开发过程中用到了大量的关于时间的处理,将后台返回的时间字符串转换为指定的格式时间再显示在UI上.例如: 将后台返回的时间字符串 2017-04-16 13:08:06 转换为:2017年04月16日、2017年04月、04月16日、2017-04-16、2017-04、04-16、13:08、星期几等等.项目是多人开发,由于前期没有统一处理时间转换的问题,后期发现项目中好多关于时间转换的代码,大部分都是通过(- : 等字符)截取成字符串数组再取相应时间拼接成指定格式,输出在UI显示的地

2021-03-30 11:24:58 270

原创 iOS中atomic和nonatomic区别及内部实现

iOS中atomic和nonatomic区别及内部实现前言iOS开发中使用@property声明属性时,经常用到atomic与nonatomic两个关键字@property(nonatomic,strong)UIImage *icon;@property(strong)UIImage *icon1;//不写默认atomicatomic与nonatomicd的主要区别就是系统自动生成的getter/setter方法不一样atomic系统自动生成的getter/setter方法会进行加锁操作non

2021-03-30 11:11:10 200

转载 iOS14隐私权限适配及其他

Overview在WWDC2020发布会上苹果展示了新的iOS14系统。对于iOS开发工程师来说,适配iOS14其重点在于隐私权限的适配。具体内容可以观看WWDC2020中:建立更好的隐私信任的视频进行了解。note:截止目前,适配iOS14需要更新mac系统到11 beta 6、xcode需要更新到12 beta 6、手机需要更新到14 beta 8,相关版本可以到苹果官网下载;更新beta版本打包可能会影响正常上架,该问题未进行测试,但需要引起注意。广告标识符的获取广告标识符(Ide

2020-12-17 16:11:00 3044

原创 判断刘海屏幕机型

判断刘海屏幕机型iOS11之后新增了一个safeAreaInsets属性可以利用 CGFloat a = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom;当a大于0时即是iPhone X ,XR,XS ,XS Max等。if (@available(iOS 11.0, *)) {CGFloat a = [[UIApplication sharedApplication] delegate].win

2020-10-21 17:36:49 818

BasicUserNotification.m

1.什么是推送通知 在某些特殊情况下,应用程序被动收到的以不同种界面形式出现的提醒信息 推送通知的作用:可以让不在前台运行的app通知app发生了改变 iOS中得推送通知种类 远程推送通知(Remote Notification) 本地推送通知(Local Notification) 2.推送通知的5种形式 3.推送通知的特点 App关闭时,可以接收通知并显示 App打开并处于后台时,通知会显示 App打开并处于前台时,通知不会显示 点击通知后,默认会自动打开发出通知的App 4.远程推送通知 在联网的情况下,由远程服务器推送给客户端的通知,又称APNs(Apple Push Notification Services) 不管应用是打开还是关闭的情况下,都能接收到服务器推送的远程通知 5.远程通知的实现基础 在联网状态下,所有苹果设备都会与苹果服务器建立长连接 长连接的作用:时间校准,系统升级,查找我的iPhone 长连接的好处:数据传输速度快,数据保持最新状态 6.远程推送的实现原理 安装App时 发送UDID和BundleID给APNs加密后返回deviceToken 登陆服务时,将用户身份和deviceToken发给服务器,服务器记录 李四给张三发消息 发送消息及张三的用户身份 服务器按照张三的身份找到存储的deviceToken,将消息和deviToken发送给APNs APNs通过deviceToken推送消息给张三 7.实现远程推送功能的前提 真机 调试阶段的证书 aps_development.cer 电脑可以调试有推送功能的app的证书 iOS_development.cer 电脑可以真机调试的证书 xxx.mobileprovision 描述文件,其中确定了哪台手机和电脑可以进行调试 发布阶段的证书 aps.cer 用该证书中说明的那台电脑发布的app具有远程推送功能时,用来使该app有推送功能的证书 iOS_distribution.cer 电脑有发布app的能力的证书 xxx.mobileprovision 描述文件,其中描述了哪台电脑可以发布app 8.实现远程推送功能的步骤 在启动方法中注册通知 注册成功后收到设备的deviceToken 实现用户点击通知后的响应(两种情况) 程序没有关闭,在后台实现AppDelegate中的didReceiveRemoteNotification方法 程序已经关闭,执行AppDelegation中的didFinishesLaunchingWithOption方法 9.远程推送的具体实现过程 去开发者平台,生成两个支持远程推送的证书 先点击App IDS添加一个准确的可以支持push功能的应用程序的BundleID 到生成的证书的那个节点下,先添加一个development阶段的支持push功能的cer文件 到最后一个provision节点下添加一个development阶段的支持push功能创建的那个App ID,cer文件要选择最新生成的支持push功能的cer文件,最后生成,下载,双击安装 为了确定cer文件和provision文件安装成功,可以到钥匙串和Xcode中的设备节点中分别查看(远程推送证书的申请流程请移步http://www.cnblogs.com/czq1989/p/5311302.html) 新建一个工程,先修改info.plist文件中Bundle ID为第二步创建的那个ID 为了兼容7.0所以修改配置中的deployment target为7.0 在AppDelegate中,发请求,询问是否要开通push功能,如果用户点击允许,则接收从服务器端发回的deviceToken(需要真机联网) 配置通过点击了通知打开应用程序后要做的事情,可以在AppDelegate中通过实现didReceiveRemoteNotification方法,就可以获取到用户点击了通知这个动作 10.远程推送过程中AppDelegate中所要响应的方法   下面的方法都是写在AppDelegate.m文件中 复制代码 /* 1.有一种打开,叫做点击图标后的打开 2.还有一种打开,叫做 点击了 通知 之后的打开 当通过 点击通知 这种方法打开应用程序,执行didFinishLaunching方法时,launchOptions 参数中,就存着通知发来的消息,也就是 类似于 didReceiveRemote方法中的那个userInfo */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([UIDevice currentDevice].systemVersion.doubleValue <= 8.0) { //向服务器发请求,要注册推送功能,以此获取到服务器返回的deviceToken //type 用来说明 支持的通知形式 //如 横幅 声音 角标 [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert]; }else{ UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge| UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]; [application registerUserNotificationSettings:settings]; //申请使用通知 [application registerForRemoteNotifications]; } NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; UILabel *label = [[UILabel alloc]init]; label.frame = CGRectMake(0, 40, 300, 200); label.numberOfLines = 0; label.textColor = [UIColor whiteColor]; label.font = [UIFont systemFontOfSize:24]; label.backgroundColor = [UIColor blueColor]; label.text =[NSString stringWithFormat:@"%@",userInfo]; [self.window.rootViewController.view addSubview:label]; return YES; } //只要获取到用户同意,则服务器端返回deviceToken //会自动执行下面的方法 //1417f54c c7f0adb0 48e3558f 2b8a8bad 0a6a5152 54af017e 32137cda 8cbdb9d0 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"%@",deviceToken); } /* 用户点击了通知,进入到应用程序中,需要捕获到这个时机 从而决定这一次的进入应用程序,到底要显示或执行什么动作,下面的方法就会在点击通知时自动调用 */ /* 1.应用程序在前台时:通知到,该方法自动执行 2.应用程序在后台且没有退出时:通知到,只有点击了通知查看时,该方法自动执行 3.应用程序退出:通知到,点击查看通知,不会执行下面的didReceive方法,而是只执行didFinishLauncing方法 */ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { //NSLog(@"%@",userInfo); //为了测试在应用程序退出后,该方法是否执行 //所以往第一个界面上添加一个label,看标签是否会显示一些内容 UILabel *label = [[UILabel alloc]init]; label.frame = CGRectMake(0, 250, 300, 200); label.numberOfLines = 0; label.textColor = [UIColor whiteColor]; label.font = [UIFont systemFontOfSize:24]; label.backgroundColor = [UIColor grayColor]; label.text =[NSString stringWithFormat:@"%@",userInfo]; [self.window.rootViewController.view addSubview:label]; } /* 此方法是新的用于响应远程推送通知的方法 1.如果应用程序在后台,则通知到,点击查看,该方法自动执行 2.如果应用程序在前台,则通知到,该方法自动执行 3.如果应用程序被关闭,则通知到,点击查看,先执行didFinish方法,再执行该方法 4.可以开启后台刷新数据的功能 step1:点击target--&gt;Capabilities--&gt;Background Modes--&gt;Remote Notification勾上 step2:在给APNs服务器发送的要推送的信息中,添加一组字符串如: {"aps":{"content-available":"999","alert":"bbbbb.","badge":1}} 其中content-availabel就是为了配合后台刷新而添加的内容,999可以随意定义 */ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { UILabel *label = [[UILabel alloc]init]; label.frame = CGRectMake(0, 250, 300, 200); label.numberOfLines = 0; label.textColor = [UIColor whiteColor]; label.font = [UIFont systemFontOfSize:24]; label.backgroundColor = [UIColor grayColor]; label.text =[NSString stringWithFormat:@"%@",userInfo]; [self.window.rootViewController.view addSubview:label]; //NewData就是使用新的数据 更新界面,响应点击通知这个动作 completionHandler(UIBackgroundFetchResultNewData); } 复制代码 11.PushMeBaby 作用:测试APNs的开源Mac项目,充当服务器,可以将内容提交给苹果的APNs服务器,然后APNs服务器再推送内容给用户的设备 使用 注销报错的代码 修改ApplicationDelegate.m文件中self.deviceToken 添加推送证书到项目中,并改名为apns.cer 运行填写信息,点击Push按钮完成发送 注意:出现SSLwrite():-36 94错误 http://www.cnblogs.com/czq1989/p/5314940.html           无法拿到证书的路径:http://www.cnblogs.com/czq1989/p/5312146.html demo:https://github.com/TigerCui/RemoteNotificationDemo.git

2019-07-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除