ARC所有权修饰符---__strong修饰符

ARC所有权修饰符

Objective-C编程中为了处理对象,可能将变量类型定义为id类型或者各种对象类型。
所谓的对象类型就是指向NSObject这样的Objective-c类的指针,例如:“NSbject *”。id类型用于隐藏对象类型的类名部分,相当于C语言中的void*

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

__strong修饰符

__strong修饰符是id类型和对象类型默认的所有权修饰符,也就是说,

id obj = [[nsobject alloc]init];

id __strong obj= [[nsobject alloc]init];

ARC无效时:
{
id obj = [[nsobject alloc]init];
[obj release];
}

为了释放生成并持有的对象,增加了release方法, 等同于ARC下的代码。

附有__strong修饰符变量的obj在超出其变量作用域时,即会在该变量被废弃时,会释放其被赋予的对象。
__strong修饰符表示对对象强引用。持有强引用的变量在超出其作用域时被废弃,随着强引用的实效,引用的对象也会随之释放。


id __strong obj0= [[nsobject alloc]init];//对象A
//obj0 持有对象A的强引用

id __strong obj1= [[nsobject alloc]init];//对象B
//obj1 持有对象B的强引用

id __strong obj2 = nil;//obj2 不持有任何对象

obj0 = obj1;
//obj0持有由obj1赋值的对象B的强引用,因为obj0被赋值,所以原先持有的对对象A的强引用实效。对象A的所有者不存在,因此废弃对象A。
此时,持有对象B的强引用的变量为 obj0,obj1。

obj2 = obj0;
//obj2持有由obj0赋值的对象B的强引用。
/此时,持有对象B的强引用的变量为obj0,obj1,obj2.

obj1 = nil;
//因为nil被赋予obj1,所以对对象B的强引用失效。
    此时,持有对象B的强引用的变量为obj0和obj2。

obj0 = nil;
//因为nil被赋予obj0,所以对对象B的强引用失效。
    此时,持有对象B的强引用的变量为obj2。

obj2 = nil;
//因为nil被赋予obj2,所以对对象B的强引用失效。
    对象B的所有者不存在,因此废弃对象B.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值