如果我知道我要使用ivar,我应该在viewDidLoad中分配/初始化它,如:
if (allPeople_ == nil)
self.allPeople = [NSArray arrayWithArray:[[selectedObject people] allObjects]];
或者我应该在那里创建一个getter方法和alloc / init:
- (Group *)allPeople {
if (allPeople_ != nil)
return allPeople_;
allPeople_ = [NSArray arrayWithArray:[[selectedObject people] allObjects]];
return allPeople_;
}
我假设使用if语句的getter方法用于延迟加载,在我的情况下我不需要这样做,因为我肯定在我的代码中使用self.allPeople。
额外问题:
如果我使用getter方法,我实际上必须这样做吗?
allPeople_ = [[NSArray arrayWithArray:[[selectedObject people] allObjects]] retain];
答案 0 :(得分:1)
我会在你打算使用它时初始化它。
关于第二个问题,它取决于如果声明属性为retain
,声明属性的方式,并将其设置为:
self.allPeople =
你不必向它发送保留信息,因为合成的二传手会为你处理。
请注意self.allPeople
与allPeople
不同,如果您不使用自我,则无法通过setter
访问它,您正在访问ivar directly
和因此它不会收到retain
消息。
答案 1 :(得分:0)
你可能会尝试让你的NSArray成为一个NSMutableArray,你可以在你的init调用中分配init。使用属性声明来合成getter和setter。至于将人员放入数组中,每次选择一个时都可以将它们添加到可变数组中