ARC推出的新型限定符是什么?
自动引用计数(ARC)引入了一些新的types限定符。 我见过__strong
和__weak
,但是他们做了什么?
__strong
表示赋值时,expression式的右值将被保留,并使用原语语义存储到左值中。 (要释放这样一个对象,所有你必须做的就是将它赋值nil
,之前引用的对象将被释放, nil
将被保留,这实际上什么也不做,它是桃子和奶油。
__unsafe_unretained
和__weak
是相似的,即右值的地址将被分配给左值,但是如果使用__weak
限定符,则该操作保证是primefaces的,并受到一些不同的语义的影响。 其中之一是,如果被分配的对象当前正在进行释放,那么赋值将被评估nil
,然后将被primefaces地存储回expression式的左值。 因此,这个措辞是不安全的,因为这个操作确实是不安全的,没有保留。
__autoreleasing
就像__strong
除了它有一个警告:保留的对象被推送到当前的自动释放池,所以你可以例如获得一个对象的临时所有权,从集合中删除它,然后返回给调用者。 还有其他的用途,但是他们主要是为了获得对象的临时所有权。
这些行为也出现在相应的属性修饰符中( strong
, unsafe_unretained
, weak
unsafe_unretained
和weak
)。
参见Clang自动参考计数技术规范
编辑:对于那些没有针对iOS 5,因此无法获得__weak
的好处, 迈克·阿什写了一个优秀的文章 (和实施)归零弱引用,你可以使用。
Strong告诉ARC保留该财产。
@property (strong,nonatomic) NSObject *object; @property (retain,nonatomic) NSObject *object;
弱是本质上的分配,一个没有保留的财产。 除了释放对象的时候,弱指针自动设置为零。
@property (weak,nonatomic) NSObject *object; @property (assign,nonatomic) NSObject *object;
弱点仅适用于iOS 4.3及更高版本。 如果你想瞄准的iOS 4.2你需要使用unsafe_unretained,这将工作完全像分配习惯。
types限定符是__autoreleasing
, __strong
__autoreleasing
, __strong
和__weak
。 属性修饰符strong
, unsafe_unretained
, weak
unsafe_unretained
,而且weak
。
查看LLVM / Clang文档中自动引用计数的第4部分 。