Multithreading and memory 读书笔记---_strong修饰词

_strong修饰词
_strong修饰词是默认的修饰词,用于修饰id和对象。
(1)对于变量
id obj =[ [NSObject alloc] init];等价与id _strong obj=[[NSObject alloc] int];而且与非ARC下的 id obj =[ [NSObject alloc] init];相同
(2)对于局部变量来说,下面代码相同

ARC下
{
//创造一个对象并且拥有它
id _strong obj = [[NSObject alloc] init];
//变量obj被_strong修饰,意味着obj拥有对象的所有权
}
//离开变量obj的区域,obj对对象的强引用消失,object被自动调用,没有对对象的强引用,对象被清除。
non-ARC 下
{

    id _strong obj = [[NSObject alloc]init];
    [obj release];
}

在ARC下,“release”方法是自动调用,当控制流离开变量obj的区域,release方法被自动调用,因为变量obj是被_strong修饰的。
(3)没有创建就拥有或获得一个对象
{

       //没有创建就拥有或获得一个对象
      id _strong obj = [NSMutable array];

 }
 //离开变量obj的区域,obj对对象的强引用消失,object被自动调用,没有对对象的强引用

(4)被_strong修饰的变量可以交换值

id __strong obj0 = [[NSObject alloc] init]; //obj0对对象A有强引用,[[NSObject alloc] init]为对象A

id __strong obj1 = [[NSObject alloc] init]; //obj1对对象B有强引用
id __strong obj2 = nil;//obj2没有引用
obj0 = obj1; //obj0对对象B有强引用,对象A没有强引用所以清除a,obj0与obj1都指向b
obj2 = obj0;//obj0、obj1、obj2都指向b
obj1 = nil;
obj0 = nil;
obj2 = nil;

(5)成员变量和方法参数被_strong修饰
@interface Test : NSObject {
id _strong obj;
}
- (void)setObject:(id __strong)obj; @end
@implementation Test - (id)init
{
self = [super init];
return self;
}
- (void)setObject:(id __strong)obj
{
obj_ = obj;
}
@end

下面是使用
{
 id __strong test = [[Test alloc] init];//test对Test 对象有强引用
[test setObject:[[NSObject alloc] init]]; //对象的成员变量obj_对NSObject实例对象有一个强引用
}
/* 

*  Leaving the scope of variable test, its strong reference disappears. 
*  The Test object is released. 
*  It is disposed of because no one has ownership. * 
*  When it is disposed of, 
*  The strong reference by its member obj_ disappears as well. 
*  The object of NSObject is released.
*  It is disposed of because no one has ownership as well. */
(6)用_strong修饰的变量,满足引用计数
*你拥有你创建的对象的所有权
*可以使用retain来拥有一个对象
*当不再需要一个对象时,你必须释放你所拥有的对象
*你不能释放你没有拥有的对象
通过分配一个_strong变量满足了前两条;第三条离开变量区域自动调用release方法,当然第四条也满足。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的修养

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值