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