ios10 新技能Get,必看

iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
1.首先是版本适配的问题
  [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue] <= 10,此方法不能再作为判断系统版本的方法,因为在iOS10中“substringToIndex: 1”会被一直检测为iOS1
解决办法:OC
      使用 [[[UIDevice currentDevice] systemVersion] compare:@"10" options:NSNumericSearch] == NSOrderedDescending 来判断,其中决定你要判断的条件有两个,“compare”:决定要判断的版本,"NSOrderedSame、NSOrderedDescending、NSOrderedAscending"等等决定你是升序还是降序判断
解决办法:Swift
ifNSProcessInfo().isOperatingSystemAtLeast Version(NSOperatingSystemVersion (majorVersion:10,minorVersion:0,patchVersion:0)){  里面是条件成立后的代码块 }。
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
  2.UITabBarController 中的改进
          在iOS 10之前,tabBarItem上的文字颜色,默认是 蓝色,上面的新消息提醒数字badge 默认是红色的,未选中的TabBarItem的文字颜色默认是黑色的,我们修改的话,也只能修改它的默认颜色 ,其它的就不能进行个性化定制,使用起来非常的不方便,iOS10之后我们可以轻松个性化定制了。
3.隐私数据访问问题:
你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash.这是因为iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都需要添加描述,但是,在使用Xcode 8之前的Xcode还是使用系统的权限通知框.
要想解决这个问题,只需要在info.plist添加NSContactsUsageDescripti on的key, value自己随意填写就可以,这里列举出对应的key(Source Code模式下):

     
      NSPhotoLibraryUsageDescr iption
      App需要您的同意,才能访问相册
     
      NSCameraUsageDescription
      App需要您的同意,才能访问相机
     
      NSMicrophoneUsageDescrip tion                              ios10 新技能Get,必看
      App需要您的同意,才能访问麦克风
     
      NSLocationUsageDescripti on
      App需要您的同意,才能访问位置
     
      NSLocationWhenInUseUsage Description
      App需要您的同意,才能在使用期间访问位置
     
      NSLocationAlwaysUsageDes cription
      App需要您的同意,才能始终访问位置
     
      NSCalendarsUsageDescript ion
      App需要您的同意,才能访问日历
     
      NSRemindersUsageDescript ion
      App需要您的同意,才能访问提醒事项
     
      NSMotionUsageDescription App需要您的同意,才能访问运动与健身
     
      NSHealthUpdateUsageDescr iption
      App需要您的同意,才能访问健康更新
     
      NSHealthShareUsageDescri ption
      App需要您的同意,才能访问健康分享
     
      NSBluetoothPeripheralUsa geDescription
      App需要您的同意,才能访问蓝牙
     
      NSAppleMusicUsageDescrip tion
      App需要您的同意,才能访问媒体资料库

-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
4.UIColor的问题
官方文档中说:大多数core开头的图形框架和AVFoundation都提高了对扩展像素和宽色域色彩空间的支持.通过图形堆栈扩展这种方式比以往支持广色域的显示设备更加容易。现在对UIKit扩展可以在sRGB的色彩空间下工作,性能更好,也可以在更广泛的色域来搭配sRGB颜色.如果你的项目中是通过低级别的api自己实现图形处理的,建议使用sRGB,也就是说在项目中使用了RGB转化颜色的建议转换为使用sRGB,在UIColor类中新增了两个api:

      - (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
      + (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
5.UICollectionViewCell的的优化

在iOS 10 之前,UICollectionView上面如果有大量cell,当用户活动很快的时候,整个UICollectionView的卡顿会很明显,为什么会造成这样的问题,这里涉及到了iOS 系统的重用机制,当cell准备加载进屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了,也就是整整一行cell都已经加载完毕,这就是造成卡顿的主要原因,专业术语叫做:掉帧.
要想让用户感觉不到卡顿,我们的app必须帧率达到60帧/秒,也就是说每帧16毫秒要刷新一次.
iOS 10 之前UICollectionViewCell的生命周期是这样的:

      1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这个方法里面,可以重置cell的状态,加载新的数据;
      2.继续滑动,就会调用cellForItemAtIndexPath方法,在这个方法里面给cell赋值模型,然后返回给系统;
      3.当cell马上进去屏幕的时候,就会调用willDisplayCell方法,在这个方法里面我们还可以修改cell,为进入屏幕做最后的准备工作;
      4.执行完willDisplayCell方法后,cell就进去屏幕了.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法.

iOS 10 UICollectionViewCell的生命周期是这样的:

      1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这里当cell还没有进去屏幕的时候,就已经提前调用这个方法了,对比之前的区别是之前是cell的上边缘马上进去屏幕的时候就会调用该方法,而iOS 10 提前到cell还在屏幕外面的时候就调用;
      2.在cellForItemAtIndexPath中创建cell,填充数据,刷新状态等操作,相比于之前也提前了;
      3.用户继续滑动的话,当cell马上就需要显示的时候我们再调用willDisplayCell方法,原则就是:何时需要显示,何时再去调用willDisplayCell方法;
      4.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法,跟之前一样,cell会进入重用队列.
      在iOS 10 之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用cellForItemAtIndexPath创建或者生成一个cell.
      在iOS 10 中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用willDisplayCell方法就可以重新出现在屏幕中了.
      iOS 10 中,系统是一个一个加载cell的,二以前是一行一行加载的,这样就可以提升很多性能;
      iOS 10 新增加的Pre-Fetching预加载
      这个是为了降低UICollectionViewCell在加载的时候所花费的时间,在 iOS 10 中,除了数据源协议和代理协议外,新增加了一个UICollectionViewDataSour cePrefetching协议,这个协议里面定义了两个方法:

      - (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPath s:(NSArray *)indexPaths NS_AVAILABLE_IOS(10_0);
      - (void)collectionView:(UICollectionView *)collectionView cancelPrefetchingForItem sAtIndexPaths:(NSArray *)indexPaths NS_AVAILABLE_IOS(10_0);

在ColletionView prefetchItemsAt indexPaths这个方法是异步预加载数据的,当中的indexPaths数组是有序的,就是item接收数据的顺序;
CollectionView cancelPrefetcingForItems At indexPaths这个方法是可选的,可以用来处理在滑动中取消或者降低提前加载数据的优先级.
注意:这个协议并不能代替之前读取数据的方法,仅仅是辅助加载数据.
Pre-Fetching预加载对UITableViewCell同样适用.
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
6.UIRefreshControl的使用

在iOS 10 中, UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脱离了UITableViewController.现在RefreshControl是UIScrollView的一个属性.
使用方法:

      UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
      [refreshControl addTarget:self action:@selector(loadData) forControlEvents:UIControlEventValueChang ed];
      collectionView.refreshControl = refreshControl;
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
7.UIApplication对象中openUrl被废弃
  在iOS 10.0以前的年代,我们要想使用应用程序去打开一个网页或者进行跳转,直接使用[[UIApplication sharedApplication] openURL 方法就可以了,但是在iOS 10 已经被废弃了,因为使用这种方式,处理的结果我们不能拦截到也不能获取到,对于开发是非常不利的,在iOS 10全新的退出了  [[UIApplication sharedApplication] openURL:nil options:nil completionHandler:nil];有一个成功的回调block 可以进行监视。
8.非常非常重要,第三方键盘一直都不能很方便的拥有长按地球键的功能,现在有了。通过 handleInputModeListFromV iew:withEvent: 可以弹出系统键盘列表。同时使用 documentInputMode 可以检测输入上下文中的语言,你可以对输入方式进行一些类似于对齐方式的调整。
9.CoreData提升了并发访问性能
10. 继2014年苹果推出VoIP证书后,这次VoIP 接口的开放,以及一个全新的 App Extension,简直是VOIP的福音,可见苹果对VOIP的重视。callkit框架 VoIP应用程序集成与iPhone的用户界面,给用户一个很棒的经历。用这个框架来让用户查看和接听电话的锁屏和VoIP管理联系人电话在手机APP的收藏夹和历史的观点。

callkit还介绍了应用程序的扩展,使呼叫阻塞和来电识别。您可以创建一个应用程序扩展,可以将一个电话号码与一个名称联系起来,或者告诉系统当一个号码应该被阻止。
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值