objective-c - ARC 引入了哪些新的类型限定符?

标签 objective-c ios memory-management automatic-ref-counting

自动引用计数 (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 为目标并因此无法获得 __weak 好处的用户,Mike Ash wrote a superb article (和实现)将弱引用归零,您可以改用它。

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

相关文章:

iphone - 每 14 天(两周)重复一次本地通知?

Objective-C 使用继承变量和覆盖继承属性

objective-c - 应用验证失败 : Unable to create Configuration directory:/user/username/. itmstransporter

clojure - Clojure 在内存占用方面的表现如何?

java - 将数据存储在变量中与内联算术

objective-c - 理解 NSString 比较

ios - 如何在 Swift 中的自定义类中初始化 Timer?

xcode - NSObject 子类化时出错 : "EXC_BAD_ACCESS"

c# - ListView 的单元格重用问题和自定义渲染器的 View 单元格

c - 从C中的动态数组回收内存