我应该在哪里分配/初始化我的ivar?

时间:2011-08-26 15:35:16

标签: iphone initialization allocation instance-variables

如果我知道我要使用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];

2 个答案:

答案 0 :(得分:1)

我会在你打算使用它时初始化它。

关于第二个问题,它取决于如果声明属性为retain,声明属性的方式,并将其设置为:

self.allPeople =

你不必向它发送保留信息,因为合成的二传手会为你处理。

请注意self.allPeopleallPeople不同,如果您不使用自我,则无法通过setter访问它,您正在访问ivar directly和因此它不会收到retain消息。

答案 1 :(得分:0)

你可能会尝试让你的NSArray成为一个NSMutableArray,你可以在你的init调用中分配init。使用属性声明来合成getter和setter。至于将人员放入数组中,每次选择一个时都可以将它们添加到可变数组中