IOS-usr/include-objc-NSObject.h-ARC与非ARC

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会在编译阶段自动帮开发者完成手动的内存管理。同时,所有代码中的retainreleaseautorelease会被标记成错误。根据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.1Strong Reference,强引用。默认类型,不加任何关键字(也可以写成__strong)。相当于之前代码中的retain属性。

3.2Autoreleasing Reference,自动释放引用。通常出现在例如系统error处理函数中(关键字__autoreleasing),描述out-parameters用,只保存在栈中,不太常用。

3.3Unsafe Reference,不安全引用。类似于之前代码中的assign属性,不分配内存(关键字__unsafe_unretained),相当于起了个别名。

3.4Weak Reference,弱引用。前面提到过,不增加计数,当对象开始释放时,立刻设置成nil


4:

      iOS开发中,@property的修饰就有很多的修饰词,如retainassignstrongweaknonatomic等等,而这些修饰词在ARC模式下与非ARC模式下也是略有不同。下面先简单说说ARC模式


5:

什么是ARC

      ARCiOS 5推出的新功能,全称为Automatic Reference Counting。一句话说,就是代码中自动加入了retainrelease,原来需要手动去管理引用计数和手动释放计数的操作,编译器已经可以自动完成了。对于我这些从Android开发转到ios开发的人来说,真是极好的,不用操心内存的管理,也不用担心内存泄露。



6:

ARC与非ARC的混编

      由于项目的需要,可能会使用一些非ARC的第三方库,通过以下设置,可以让项目同时兼容ARC与非ARC模式。

      ARC的话,代码后面加一个编译选项:-fno-objc-arc

       ARC的话,代码后面加一个编译选项:-fobjc-arc 

也可以把非ARC的代码转换为ARC类型的代码,其实就是把一些手动的retainrelease代码去掉。



7:

retainassignstrongweaknonatomic的简单区别

1ARC模式

     一般来说ARC模式下的property变量修饰词为strongweak,相当于非ARC模式下的retainassign

  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. 加边于;加旁注于

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值