我不喜欢ARC。
但是在非 ARC 下缺少 ARC 最重要的特性,即归零弱引用。目前我正在使用MAZeroingWeakRef,它可以工作,但是很笨拙,有时会使代码变得多余。还有其他方法可以将弱引用归零吗?
我不喜欢ARC。
但是在非 ARC 下缺少 ARC 最重要的特性,即归零弱引用。目前我正在使用MAZeroingWeakRef,它可以工作,但是很笨拙,有时会使代码变得多余。还有其他方法可以将弱引用归零吗?
实现归零弱引用并不难。您所要做的只是跟踪所有引用指针 - 将它们存储在集合中 - 并NULL
在指向对象被释放时进行分配。无论如何,手动完成所有这些事情确实是很多工作,您实际上需要编写所有手动跟踪代码才能在 Objective-C 中足够高效。
最后,您最终会发现您需要一些自动代码编写机器——静态编译器——而这正是 ARC 所做的。你可以自己实现类似 ARC 的东西。但如果我是你,我只会使用编译器维护者已经存在的、健壮的、稳定的、精心设计和支持的实现。
此外,如果您想开发 Apple 的东西,不跟随 Apple 也不是明智的行为。与其他平台持有者(例如 Microsoft)不同,Apple 不太关心保持向后兼容性。如果他们认为某些东西不好,它最终会被弃用并删除——就像 Objective-C GC。
我认为您应该坚持在引入 ARC 之前 Apple 自己推荐的范式,也就是说,从-dealloc
方法中清除所有“弱”引用。它不仅是事实上的标准,而且还是 Xcode 代码重构在 ARC 未启用时的行为方式,因此遵守它应该可以为您省去一些麻烦。