ARC推出的新型限定符是什么?

自动引用计数(ARC)引入了一些新的types限定符。 我见过__strong__weak ,但是他们做了什么?

__strong表示赋值时,expression式的右值将被保留,并使用原语语义存储到左值中。 (要释放这样一个对象,所有你必须做的就是将它赋值nil ,之前引用的对象将被释放, nil将被保留,这实际上什么也不做,它是桃子和奶油。

__unsafe_unretained__weak是相似的,即右值的地址将被分配给左值,但是如果使用__weak限定符,则该操作保证是primefaces的,并受到一些不同的语义的影响。 其中之一是,如果被分配的对象当前正在进行释放,那么赋值将被评估nil ,然后将被primefaces地存储回expression式的左值。 因此,这个措辞是不安全的,因为这个操作确实是不安全的,没有保留。

__autoreleasing就像__strong除了它有一个警告:保留的对象被推送到当前的自动释放池,所以你可以例如获得一个对象的临时所有权,从集合中删除它,然后返回给调用者。 还有其他的用途,但是他们主要是为了获得对象的临时所有权。

这些行为也出现在相应的属性修饰符中( strongunsafe_unretainedweak unsafe_unretainedweak )。

参见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 。 属性修饰符strongunsafe_unretainedweak unsafe_unretained ,而且weak

查看LLVM / Clang文档中自动引用计数的第4部分 。