IOS-usr/include-objc-NSObject.h
ARC与非ARC专题
1:
iOS5中,有个很吸引眼球的特性就是“Automatic Reference Counting”,简单来说就是自动引用计数。 Objective-c 2.0支持垃圾收集器(Garbage Collection,简称GC),但是垃圾收集器只能在MAC程序上开启,iOS上没办法用。就算在MAC应用程序上可以用,GC也会有性能上的损耗。
现在LLVM3.0多了一个给力的新东西,叫Automatic Reference Counting。开启这个选项之后,LLVM会在编译阶段自动帮开发者完成“手动”的内存管理。同时,所有代码中的retain,release和autorelease会被标记成错误。根据WWDC 2011大会的介绍,retain/release快了2.5倍,@autoreleasepool快了6倍,objc_msgSend快了33%。
2:
开启ARC后需要遵循的原则
2.1、不能调用retain/release/autorelease,这些由编译器来完成。
2.2、结构内不能有对象指针,如果结构中包含,则需要以类代替结构。
2.3、不能使用id<–>void *的类型转换,因为编译器不知道这个void *是否需要retained。
2.4、不能使用NSAutoreleasedPool,要用@autoreleasepool {……}来代替。
3:
ARC中引入的四个新的关键字
3.1、Strong Reference,强引用。默认类型,不加任何关键字(也可以写成__strong)。相当于之前代码中的retain属性。
3.2、Autoreleasing Reference,自动释放引用。通常出现在例如系统error处理函数中(关键字__autoreleasing),描述out-parameters用,只保存在栈中,不太常用。
3.3、Unsafe Reference,不安全引用。类似于之前代码中的assign属性,不分配内存(关键字__unsafe_unretained),相当于起了个别名。
3.4、Weak Reference,弱引用。前面提到过,不增加计数,当对象开始释放时,立刻设置成nil。
4:
iOS开发中,@property的修饰就有很多的修饰词,如retain、assign、strong、weak、nonatomic等等,而这些修饰词在ARC模式下与非ARC模式下也是略有不同。下面先简单说说ARC模式
5:
什么是ARC
ARC是iOS 5推出的新功能,全称为Automatic Reference Counting。一句话说,就是代码中自动加入了retain与release,原来需要手动去管理引用计数和手动释放计数的操作,编译器已经可以自动完成了。对于我这些从Android开发转到ios开发的人来说,真是极好的,不用操心内存的管理,也不用担心内存泄露。
6:
ARC与非ARC的混编
由于项目的需要,可能会使用一些非ARC的第三方库,通过以下设置,可以让项目同时兼容ARC与非ARC模式。
非ARC的话,代码后面加一个编译选项:-fno-objc-arc
ARC的话,代码后面加一个编译选项:-fobjc-arc
也可以把非ARC的代码转换为ARC类型的代码,其实就是把一些手动的retain与release代码去掉。
7:
retain、assign、strong、weak、nonatomic的简单区别
1、ARC模式
一般来说ARC模式下的property变量修饰词为strong、weak,相当于非ARC模式下的retain、assign,
strong :代替retain。
weak:代替assign,但是比assign多一个功能,指针指向的地址被释放之后,指针本身也会自动被释放。
constraint [kən’streint] n. 约束;强制;局促,态度不自然
descriptive [di’skriptiv] adj. 描写的,叙述的;描写性的
hierarchy ['haiə,rɑ:ki] n. 层级;等级制度
inspector [in’spektə] n. 检查员;巡视员
attribute [ə'tribju:t, ‘ætribju:t] n.特质; 属性 vt. 把…归于;归属
multiplier [‘mʌltiplaiə] n. 乘数;增加者;繁殖者;倍增器
constant [‘kɔnstənt] adj.经常的;恒定的 n. 常数;恒量
typically [‘tipikəli] adv. 代表性地;作为特色地
compact [kəm'pækt, ‘kɔmpækt] n.小粉盒; 合同,契约 adj.简洁的; 紧凑的,紧密的
regular [‘reɡjulə] adj.合格的;定期的 n.常客;中坚分子
margin [‘mɑ:dʒin] n. 边缘;利润,余裕 vt. 加边于;加旁注于