In @mmalc's https://stackoverflow.com/users/23233/mmalc response https://stackoverflow.com/questions/155964/what-are-best-practices-that-you-use-when-writing-objective-c-and-cocoa#156288 to 这个问题 https://stackoverflow.com/questions/155964/what-are-best-practices-that-you-use-when-writing-objective-c-and-cocoa他指出“一般来说,你应该not在 dealloc(或 init)中使用访问器方法。” 为什么 mmalc 这么说?
我能想到的唯一真正原因是性能和避免 @dynamic setter 的未知副作用。
讨论?
它基本上是最大限度地减少错误可能性的指南。
在这种情况下,您的 setter/getter 可能会无意中对对象的状态做出直接或间接的假设。当对象正在设置或销毁时,这些假设可能会出现问题。
例如,在下面的代码中,观察者不知道“Example”正在被销毁,并且可以假设已经释放的其他属性是有效的。
(您可能会争辩说,您的对象应该在拆除自身之前删除所有观察者,这将是一个很好的实践,也是防止意外问题的另一个准则)。
@implementation Example
-(void) setFoo:(Foo*)foo
{
_foo = foo;
[_observer onPropertyChange:self object:foo];
}
-(void) dealloc
{
...
self.foo = nil;
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)