[iOS进阶]探索iOS开发中各种机制

1、缓存机制

iOS缓存机制主要包括按需缓存和预缓存两种,一般常用的时按需缓存,只有当应用需要实现用户对离线数据也能处理的时候才需要预缓存。

按需缓存又分为URL缓存和数据模型缓存模式,数据模型缓存可以采用NSKeyedArchive和NSKeyedUnarchive来实现,需要遵循NSCoding协议,如SDWebImage就是用来处理imge缓存的第三方库。如果遵循HTTP1.1 协议的缓存规范,那么可以用URL缓存,AFNetworking提供了对HTTP1.1 缓存规范的原生支持。

另外预缓存一般可以用Core Date实现,尽量避免使用SQList,除非数据库需要跨平台使用。

文章链接:http://blog.csdn.net/shawjan/article/details/45437531

2、推送机制

两张图搞定消息推送机制:

图一

图一中描述了消息推送的完整过程

  1. 应用程序向iOS注册消息推送
  2. iOS从APNS Server获取device token,应用程序接收device token
  3. 应用程序将device token发送给PUSH服务器端程序
  4. 服务端程序向APNS服务发送消息
  5. APNS服务将消息发送给iPhone应用程序

无论是iPhone客户端和APNS,还是Provider和APNS1,都需要通过证书进行连接

图二

图二中描述了推送的过程:

  • 第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 (保留了device token)

  • 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。

  • 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。(始终会推送,弹出与否看是否开启推送)

文章链接:
http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html

3、消息机制/运行时机制

iOS消息机制与C++中得虚函数很相像,都是运行时绑定,而且传递的方向也是由子类到父类。
iOS消息机制分为两个过程,消息传递和消息转发,消息传递的方向是子类到父类,消息传递的过程是对类的methodList进行搜寻,试图找到能够处理消息的方法。如果消息传递处理不了,那么就进行消息转发。

  • 消息转发过程首先会问所属类是否有@dynamic方法能够处理该消息
  • 没有的话就接着询问所属类内部的对象是否能够处理该消息
  • 没有的话就将该消息的所有信息打包为NSInvocation对象,启动完整的消息转发机制,看看所属类以及父类能够处理该消息
  • 没有的话就直接调用“doesNotRecognizeSelector:”方法抛出异常,表示消息无法处理

整个过程会建立一个“快速映射表”,以提高效率。

文章链接:http://blog.csdn.net/shawjan/article/details/45478901

4、事件机制

iOS事件机制主要包括响应者链和事件分发两个要点,事件分发的目的是为了找到第一响应者,事件分发的过程构成了一条响应者链。

文章链接:http://blog.csdn.net/shawjan/article/details/45482239

5、反射机制

反射机制,即通过类名来生成相应类的实例或者获取已知实例的相关信息。
在iOS中,反射机制包括:

  • 通过NSObject中定义的方法:
id class = [[array objectAtIndex:0] class];

NSArray array = [[NSArray alloc] init];
[array isKindOfClass:NSObject];
[array isMemberOfClass:NSObject];

[array responseToSelector:@(objectAtIndex)];
  • 直接调用运行时函数进行动态编程
    详见文章链接1

文章链接1:
http://blog.csdn.net/x_topfan/article/details/9713231
文章链接2:
http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html

6、后台运行机制

  • iOS后台运行机制(伪后台)
    1. 程序进入后台后,有5s-10m的执行缓冲时间,之后系统会终止该程序运行,内存中还存有应用程序的相关信息。如果内存不足会将程序挂起,释放内存。
    2. 按两下HOME键后,显示的知识[最近用过的应用程序],相当于浏览器的浏览记录。
    3. 也有一些例外的程序是容许在后台中持续执行的,如后台播放音乐、GPS程序、VOIP程序、Newsstand以及周边配件附属的程序。
    4. 推送机制经过APNS发送到手机
  • windows phone系列后台运行机制(伪后台)
    1. 其实与iOS相近似,后台共有live agent(实时后台)(限制数量)、冻结(超过数量的任务的状态)、墓碑状态(内存吃紧进入的状态)、关闭(内存完全不够时进入的状态)四种情况。
    2. 系统允许程序将自己锁定在实时后台和冻结两种状态,不会被墓碑,但是也是有限制的。
    3. 推送机制不如iOS
  • android后台运行机制(真后台)
    1. 用户离开应用程序时,他的进程在后台被保留下载,而是被会根据需要,而允许它在需要的时候继续运行(比如下载web界面),并且在用户返回时回到前台
    2. 如果应用存在于另外一种服务模式,则即使杀了后台也仍然可以存在于服务中,除非机子root过了。
      PS:windows电脑系统多任务管理和android多任务管理近似,后台任务“正在运行”,不表示进程正在占用CPU,因此可见虽然开了很多进程,但是CPU占有率不高,内存占有率还是很高的。

文章链接1:
http://blog.csdn.net/enuola/article/details/9148631
文章链接2:
http://xiaoxin1989521.blog.163.com/blog/static/8100919620120306735885/
文章链接3:
http://www.anzhuo.me/anzhuojiaocheng/1650.html

7、沙盒机制

iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

  1. 每个应用程序都有自己的存储空间

  2. 应用程序不能翻过自己的围墙去访问别的存储空间的内容

  3. 应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。
    [iOS进阶]探索iOS开发中各种机制_第1张图片

通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。

文章链接:
http://blog.csdn.net/totogo2010/article/details/7669837

8、内存管理机制

对C++程序员来说,使用指针最蛋疼的就是内存管理,为了避免卷进繁琐的管理内存保证不会内存泄露,我通常尽量不使用指针。但是在objective-c中,所有的变量都是指针,那么你就不得不考虑下如何管理内存了。

iOS内存管理从手动引用计数演变到自动引用计数,本质上是没有变得,只不过编译器帮忙添加了部分release、retain代码,减少了程序员的负担,提高了代码的安全性。

文章链接:http://blog.csdn.net/shawjan/article/details/44814195

9、复用机制

UITableView的复用机制
文章链接:http://blog.sina.com.cn/s/blog_9c3c519b01016aqu.html

  1. Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。 ↩

你可能感兴趣的:(ios,机制总结,进阶)