第二章 ARC规则

所有权修饰符

  • ARC有效时,id类型和对象类型同C语言其他类型不同,其类型上必须附加所有权修饰符。所有权修饰符一共有4种。
    • __strong 修饰符
    • __weak 修饰符
    • __unsafe_unretained 修饰符
    • __autoreleasing 修饰符
__strong 修饰符

__strong 修饰符是默认的所有权修饰符。(id obj = [[NSOject alloc] init] 等价于id __strong obj = [[NSOject alloc] init] )

附有__strong修饰符的变量在超出其变量作用域时,即在该变量被废弃时,会释放其被赋予的对象。

持有强引用的变量在超出其作用域时被废弃,随着强引用的失效,引用的对象会随之释放。

__strong 修饰的变量为强引用,强引用变量自己持有对象,即取得非自己生成并持有的对象,对持有的对象遵循谁持有谁释放原则,同时一个对象可能被多个变量持有。

通过__strong修饰符,不必再次键入retain或者release,完美地满足了“引用计数式内存管理的思考方式”。


__weak 修饰符
__weak 修饰符解决引用计数式内存管理中必然会发生的“循环引用”的问题。另外一个优点是,在持有某对象的弱引用时,若该对象被废弃,则此弱引用将自动失效且处于nil被赋值的状态。

发生循环引用的例子如:对自身的强引用;对象之间的相互强引用。

__weak修饰符提供弱引用。弱引用不能持有对象实例。


__autoreleasing 修饰符

ARC有效时不能使用autorelease,但是autorelease功能是起作用的使用“@autoreleasepool{}”来代替“NSAutoreleasePool类对象生成、持有及废弃”这一范围。并且,ARC有效时,通过将对象赋值给附加了__autoreleasing修饰符的变量来替代调用autorelease方法。

id的指针胡对象的指针在没有显示指定时会被附加上__autoreleasing修饰符。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值