自动引用计数(ARC)引入了一些新型的限定符。我已经看过__strong
和__weak
,但是它们怎么办?
最佳答案
__strong
表示在赋值时,将使用原始语义保留表达式的右值并将其存储到左值中。 (要取消分配这样的对象,只需将其分配给nil
,将释放先前引用的对象,保留nil
,实际上什么也没做,而是桃子和奶油。)
在将右值的地址分配给左值的意义上,__unsafe_unretained
和__weak
是相似的,但是如果您使用__weak
限定符,则保证此操作是原子的并且受某些不同的语义约束。其中之一是,如果要分配的对象当前正在释放,则该分配将求值为nil
,然后将其原子存储回表达式的左值。因此,措辞__unsafe_unretained
,因为该操作确实是不安全且不保留的。__autoreleasing
类似于__strong
,但有一个警告:保留的对象被推送到当前的自动释放池中,因此您可以例如获取对象的临时所有权以将其从集合中删除,然后将其返回给调用方。这样做还有其他用途,但主要与获取对象的临时所有权有关。
这些行为也会在相应的属性修饰符(strong
,unsafe_unretained
和weak
)中出现。
见Clang Automatic Reference Counting Technical Specification
编辑:对于不面向iOS 5的用户,因此无法在弱引用清零时获得__weak
,Mike Ash wrote a superb article(和实现)的好处,您可以使用这些弱引用。
关于objective-c - ARC引入了哪些新的类型限定符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7949460/