如何在非ARC下归零弱引用?

时间:2012-05-25 12:54:51

标签: cocoa automatic-ref-counting weak-references

我不喜欢ARC。

但ARC的最重要特征是归零弱参考,在非ARC下缺失。目前我正在使用MAZeroingWeakRef,它可以工作,但是hacky,有时会使代码变得多余。将弱引用归零的任何其他方法?

2 个答案:

答案 0 :(得分:2)

实现归零弱引用并不难。所有你需要做的就是跟踪所有引用指针 - 将它们存储在一个集合中 - 并在指向对象被释放时分配NULL。无论如何,手动执行所有这些事情真的是很多工作,你需要编写所有手动跟踪代码,以便在Objective-C中足够高效。

最后,你终于会发现你需要一些自动代码编写机 - 静态编译器 - 而这正是ARC所做的。你可以自己实现像ARC这样的东西。但如果我是你,我将使用编译器维护者已经存在的,健壮的,稳定的,精心设计和支持的实现。

此外,如果您想开发Apple产品,不遵循Apple并不是明智的行为。与其他平台持有者(如微软)不同,Apple并不关心保持向后兼容性。如果他们不认为某些东西是好的,它将被弃用并最终删除 - 例如Objective-C GC。

答案 1 :(得分:1)

我认为你应该坚持使用Apple自己在ARC推出之前推荐的范例,即在-dealloc方法中忽略所有“弱”引用。它不仅是事实上的标准,而且它也是Xcode代码重构在未启用ARC时的行为方式,因此符合它应该可以省去一些麻烦。