本章主要讲述如何在IOS设备上进行多线程编程的问题。
为此,苹果公司提供了GCD技术进行任务的分派。
另外还添加了block语言功能:
block可以在把代码块传递给另一个方法或函数的位置进行定义,即所谓的内联方式定义。(感觉这个特性只是增加了代码块的可读性)
block可以访问在创建它的范围内可用的变量。(这是一个比较实用的特性,避免了大量参数的传递)
block可以以读/写的方式访问以__block修饰的变量。(这样就可以进行不同线程间的数据交互)
GCD提供了dispatch_get_main_queue()方法获取主线程队列,在非主线程中可以往此队列中添加block以操作UI。(因为UI是非线程安全的,所以需要由主线程更新)
GCD提供了dispatch group来进行并行操作,添加到同一个group内的所有程序块可以并行进行执行;还可以通过dispatch_group_notify方法在当前group内的所有程序块都执行完毕后再执行接下来的操作。
2015-07-08 22:20:33
本章的第二部分主要讲述了应用程序的运行状态(未运行、活动、不活动、后台、挂起);
其中未运行、挂起状态一般无法进入,所以不会去处理;开发人员需要处理的就是应用程序在活动<-->不活动<-->后台三个状态之间进行切换时的四个委托方法或者通知;
尤其是从不活动状态进入到后台状态时,由于在5秒后应用程序将会被挂起,所以此时需要考虑大量的处理(比如释放文件图片资源、断开网络连接;保存当前界面信息)以减少应用程序对于内存的占用;
而且在进入到后台状态时,可以使用UIApplication的beginBackgroundTashWithExpirationHandler:方法请求获得更多的停留时间,以避免进入挂起状态。