ios10以前杂乱的和通知相关的API都被统一了,现在开发者可以使用独立的UserNotificaitons.framework来集中管理和使用iOS系统中通知的功能。在此基础上,Apple还增加了撤回单条通知,更新已展示通知,中途修改通知内容,在通知中展示图片视频,自定义通知UI等一系列功能。
适配iOS10
UICOllecitonViewCell的优化
在ios10之前,UIcollectionView上面如果有大量的Cell,当用户活动很快的时候,整个UIcollectionView有很卡顿,为什么会造成这样的问题,这里涉及到iOS系统的重用机制,当cell准备加载进到屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了,也就是整整一行cell都已经加载完毕,这就是造成卡顿的主要原因,专业术语叫掉帧
IOS中的内存分配
内存分配可以分为5个区
栈区(stack)
这个一般由编译器操作,或者说是系统管理,会存一些局部变量,这些系统都会帮我们自动实现,无需我们干预,所以大量的局部变量,深递归,函数循环调用都可以耗尽栈内存而程序崩溃
堆区(heap)
一般由程序员管理,比如alloc申请内存,free释放内存,我们创建的对象也都放在这里
全局区(静态区 static)
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。
常量区
常量字符串就是放在这里的,还有const常量
代码区
存放代码,app程序会拷贝到这里,程序不是在
图中各个区并不连续
当一个app启动后,代码区,常量区,全局区地址已经固定,因此指向这些区的指针不会为空而产生崩溃性的错误,而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入和弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃
升级Xcode8后注意的问题
现在已经可以从AppStore升级到Xcode8的正式版了,但是升级之后会有一些莫名其妙的问题,再次总结如下:
杂乱无章的Bug日志
iOS推送
推送服务可以说是所有App的标配,不论是那种类型的App,推送都从很大程度上决定了App的打开率,使用率,存活率。因此熟知并掌握推送原理及方法,对每一个开发者来说都是必备技能,对每一个依赖App的公司都至关重要
从ios10新增的UserNotifications Framework
可以发现,Apple整合了原有散乱的API,并且增加了很多强大的功能。以Apple官方的角度来看,也必然是相当重视推送服务对App的影响,以及对Apple生态圈长远发展的影响。
组合与继承
何时使用子类
首先,我们讨论几种使用子类比较合适的场景。如果你要写一个自定义布局的UITableViewCell,那就创建一个子类。这同样适用于几乎每个视图。一旦你开始布局,把这块代码放入子类就更合理一些,不管代码得到了更好的封装,你也能得到一个可在工程之间重用的组件。
组合继承
View-Layer协作
在ios中,所有的View都是由一个底层的layer来驱动的。View和它的layer之间有着紧密的联系,View其实直接从layer对象中获取了绝大多数它所需要的数据。在ios中也有一些单独的layer,比如AVCaptureVideoPreviewLayer
和CAShapeLayer
,它们不需要附加到view上就可以在屏幕上显示内容。两种情况下都是layer起决定作用。当然了,附加到view上的layer和单独的layer在行为上还是稍有不同的。
自定义 ViewController 容器转场
我们在本文讨论navigation controller中的两个view controller之间的转场动画,但是这些做法在 tab bar controller或者任何你自己定义的view controller容器中也是通用的…
常用的第三方类库&学习资料
自己总结的iOS、mac开源项目及库,持续更新。。。。 github排名 https://github.com/trending,github搜索:https://github.com/search