自动引用计数(ARC)引入了一些新型的限定符。我已经看过__strong__weak,但是它们怎么办?

最佳答案

__strong表示在赋值时,将使用原始语义保留表达式的右值并将其存储到左值中。 (要取消分配这样的对象,只需将其分配给nil,将释放先前引用的对象,保留nil,实际上什么也没做,而是桃子和奶油。)

在将右值的地址分配给左值的意义上,__unsafe_unretained__weak是相似的,但是如果您使用__weak限定符,则保证此操作是原子的并且受某些不同的语义约束。其中之一是,如果要分配的对象当前正在释放,则该分配将求值为nil,然后将其原子存储回表达式的左值。因此,措辞__unsafe_unretained,因为该操作确实是不安全且不保留的。
__autoreleasing类似于__strong,但有一个警告:保留的对象被推送到当前的自动释放池中,因此您可以例如获取对象的临时所有权以将其从集合中删除,然后将其返回给调用方。这样做还有其他用途,但主要与获取对象的临时所有权有关。

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

Clang Automatic Reference Counting Technical Specification

编辑:对于不面向iOS 5的用户,因此无法在弱引用清零时获得__weakMike Ash wrote a superb article(和实现)的好处,您可以使用这些弱引用。

关于objective-c - ARC引入了哪些新的类型限定符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7949460/

10-12 14:31