一篇旧帖子解释得很好:Why shoudn't I use accessor methods in init methods
但我的问题是:
问:如果我没有在 Objective C 的子类中覆盖访问器方法,那么在 中使用是否安全init
?
一篇旧帖子解释得很好:Why shoudn't I use accessor methods in init methods
但我的问题是:
问:如果我没有在 Objective C 的子类中覆盖访问器方法,那么在 中使用是否安全init
?
Apple 的最佳实践说不要使用 self. 在 init 或 dealloc 方法中的访问器。它可能会很好,但基本上Apple无法保证。
If I am not overriding accessor methods in sub class in Objective C, is it safe to use?
答:永远不要使用 self.accessor。
从我在 20 年以上的苹果开发人员(可可、obj-c)下的 2 年以上工作经验中,我学到的东西是一样的。
很多时候,我们的团队被要求删除所有这些,并被指导使用其他一些设计模式或方式,即使它是必需的。
如果对象被创建为nonatomic
,并且许多线程在同一个属性/对象上工作,这可能会给您带来问题。self.
使您的类/对象绑定。正如您已标记 ios,对于以前的 ios 版本,这可能已经完成,但现在 ios 支持 kvo,所以您不应该遵循这种方式。
通常避免阻止 KVO 机制访问部分初始化或部分释放的对象。对于 Mac OS X 开发尤其如此,其中绑定和 KVO 发挥了很大作用,尤其是在应用程序的用户界面中。我不是 iPhone 开发人员,但如果 iPhone 平台上也使用了 KVO,那么避免在你的init
anddealloc
方法中使用访问器方法可能就足够了。
KVO 为您的类创建一个动态子类,以便它可以轻松监控属性的更改。
init
在和中避免它们很容易dealloc
。一些人认为,无论 Apple 的建议如何,在任何地方都使用访问器方法更容易,但惯例是避免使用它们,init
并且dealloc
遵循惯例通常意味着以后伤害更小,即使您现在没有预料到任何问题。