自动引用计数 (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/