嗨,当你进行懒惰的实例化时,你应该在setter或getter中进行吗?我听说你是在getter中做的,但如果属性在getter调用之前设置了怎么办?这是否意味着该物业仍然是零?另外,如果你在getter中实例化懒惰并且有人调用了setter函数,但是你在setter中没有懒惰实例化什么是属性值?
答案 0 :(得分:0)
我认为吸气剂是一个更好的地方。如果首先调用setter - 那么它会将属性设置为要求它执行的任何操作,并且没有人关心属性的先前值是什么。
- (id)foo
{
if (_foo == nil) {
_foo = [[Foo alloc] init];
}
return _foo;
}
- (void)setFoo:(id)f
{
if (_foo != f) {
[_foo release]; // Yay, messaging nil is safe!
_foo = [f retain];
}
}