为什么我不应该在init/dealloc中使用目标C2.0访问器?

为什么我不应该在init/dealloc中使用目标C2.0访问器?

在……里面@mmalc‘s 反应这个问题他说:“一般来说,你应该在dealloc(或init)中使用访问器方法。

我能想到的唯一真正的原因是性能和避免@Dynamicsetters的未知副作用。



扬帆大鱼
浏览 454回答 3
3回答

宝慕林4294392

这一切都是关于使用习惯性一致的代码。如果您对所有代码进行了适当的格式化,那么就有一组规则可以保证在init/dealloc中使用访问器是安全的。最大的问题是(正如mmalc所说),设置属性默认状态的代码不应该通过访问器,因为它会导致各种讨厌的问题。问题是,没有必要设置属性的默认状态。由于许多原因,我一直使用自初始化的访问器,如下所示:- (NSMutableDictionary *) myMutableDict {     if (!myMutableDict) {         myMutableDict = [[NSMutableDictionary alloc] init];     }     return myMutableDict;}这种类型的属性初始化允许一个人推迟许多可能实际上不需要的init代码。在上述情况下,init不负责引入属性状态,而且在init方法中使用访问器是完全安全的(甚至是必要的)。诚然,这确实对您的代码施加了额外的限制,例如,对于超类中的属性,带有自定义访问器的子类必须调用超类访问器,但这些限制并不与Cocoa中常见的其他各种限制不一致。

人到中年有点甜

你回答了你自己的问题:性能本身可能是一个非常充分的理由(特别是如果您的访问器是原子的)。您应该避免访问器可能产生的任何副作用。如果您的类可能被子类化,则后者尤其是一个问题。但是,还不清楚为什么这一问题被专门用于目标-C2访问器?无论您是使用声明的属性还是自己编写访问器,都适用相同的原则。
打开App,查看更多内容
随时随地看视频慕课网APP