MAZeroingWeakRef - 由 Mike Ash 制作 - [email protected]
MAZeroingWeakRef 是一个用于在 retain/release Cocoa 和 Cocoa Touch 代码中使用零引用弱引用的库。这些引用不会使对象 alive,当对象销毁时自动变为 nil。
MAZeroingWeakRef 在 Cocoa 垃圾回收下无法工作。对于这一点,已经存在内置的 __weak 指示符,尽管它的使用方式略有不同。
API 简单,主要可以从头文件中自我解释。请注意,清理块仅在高级使用中需要,需要执行比简单设置引用为 nil 时更多的操作。请务必注意头文件中关于不要在清理块中执行太多工作的警告。
为了允许对 CoreFoundation 桥接对象使用弱引用,必须对大量私有 API 进行疯狂的功能性黑客。对于不喜欢那种类型的人,或者担心为 iOS 构建时会被拒绝的人,可以减少或完全禁用这种疯狂的黑客行为。查看 MAZeroingWeakRef.m 中的 COREFOUNDATION_HACK_LEVEL 宏及其上面的注释,描述了不同级别的作用。
还有一个类似的 KVO_HACK_LEVEL 宏。
对于 iOS 工作或 Mac App Store 工作而言,你可能希望将 COREFOUNDATION_HACK_LEVEL 和 KVO_HACK_LEVEL 都设置为 0
。在此模式下,MAZeroingWeakRef 不使用任何私有 API。
此外,如果你的应用需要运行在 iOS 3.x 上,您需要将基于块的代码设置 USE_BLOCKS_BASED_LOCKING 禁用为 0
。
MAZeroingWeakRef 代码可以从 GitHub 获取。
http://github.com/mikeash/MAZeroingWeakRef
MAZeroingWeakRef 在 BSD 许可证下提供。
有关更多信息,这篇博客文章给出了对该 API 的基本介绍
http://mikeash.com/pyblog/introducing-mazeroingweakref.html
这描述了它如何在大多数情况下工作
http://mikeash.com/pyblog/friday-qa-2010-07-16-zeroing-weak-references-in-objective-c.html
这描述了某些较为复杂的部分
http://mikeash.com/pyblog/friday-qa-2010-07-30-zeroing-weak-references-to-corefoundation-objects.html
享受乐趣!