安路的技术博客

Nothing in life is to be feared. It is only to be understood

Ios10 UserNotifications

| Comments

ios10以前杂乱的和通知相关的API都被统一了,现在开发者可以使用独立的UserNotificaitons.framework来集中管理和使用iOS系统中通知的功能。在此基础上,Apple还增加了撤回单条通知,更新已展示通知,中途修改通知内容,在通知中展示图片视频,自定义通知UI等一系列功能。

适配iOS10

| Comments

UICOllecitonViewCell的优化

在ios10之前,UIcollectionView上面如果有大量的Cell,当用户活动很快的时候,整个UIcollectionView有很卡顿,为什么会造成这样的问题,这里涉及到iOS系统的重用机制,当cell准备加载进到屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了,也就是整整一行cell都已经加载完毕,这就是造成卡顿的主要原因,专业术语叫掉帧

IOS中的内存分配

| Comments

内存分配可以分为5个区

栈区(stack)

这个一般由编译器操作,或者说是系统管理,会存一些局部变量,这些系统都会帮我们自动实现,无需我们干预,所以大量的局部变量,深递归,函数循环调用都可以耗尽栈内存而程序崩溃

堆区(heap)

一般由程序员管理,比如alloc申请内存,free释放内存,我们创建的对象也都放在这里

全局区(静态区 static)

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。

常量区

常量字符串就是放在这里的,还有const常量

代码区

存放代码,app程序会拷贝到这里,程序不是在

1

图中各个区并不连续

当一个app启动后,代码区,常量区,全局区地址已经固定,因此指向这些区的指针不会为空而产生崩溃性的错误,而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入和弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃

iOS推送

| Comments

推送服务可以说是所有App的标配,不论是那种类型的App,推送都从很大程度上决定了App的打开率,使用率,存活率。因此熟知并掌握推送原理及方法,对每一个开发者来说都是必备技能,对每一个依赖App的公司都至关重要

从ios10新增的UserNotifications Framework可以发现,Apple整合了原有散乱的API,并且增加了很多强大的功能。以Apple官方的角度来看,也必然是相当重视推送服务对App的影响,以及对Apple生态圈长远发展的影响。

组合与继承

| Comments

何时使用子类

首先,我们讨论几种使用子类比较合适的场景。如果你要写一个自定义布局的UITableViewCell,那就创建一个子类。这同样适用于几乎每个视图。一旦你开始布局,把这块代码放入子类就更合理一些,不管代码得到了更好的封装,你也能得到一个可在工程之间重用的组件。

View-Layer协作

| Comments

在ios中,所有的View都是由一个底层的layer来驱动的。View和它的layer之间有着紧密的联系,View其实直接从layer对象中获取了绝大多数它所需要的数据。在ios中也有一些单独的layer,比如AVCaptureVideoPreviewLayerCAShapeLayer,它们不需要附加到view上就可以在屏幕上显示内容。两种情况下都是layer起决定作用。当然了,附加到view上的layer和单独的layer在行为上还是稍有不同的。