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

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

问题描述:

如果我知道,我将使用伊娃我应该分配/初始化它在viewDidLoad中,如:我应该在哪里分配/初始化我的ivar?

if (allPeople_ == nil) 
    self.allPeople = [NSArray arrayWithArray:[[selectedObject people] allObjects]]; 

,或者我应该建立在有一个getter方法和分配/初始化:

- (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

对于额外的问题:http://stackoverflow.com/questions/3924463/how-is-retain-setter-用合成器实现/ 3925204#3925204 – jv42

+0

对不起,我的意思是说getter,而不是setter。 – tazboy

我会初始化它,只要你打算使用它。

至于第二个问题,这取决于如何,如果它被声明为retain你的财产申报,并设置它像这样:

self.allPeople = 

你就不必向它发送一个retain消息,因为合成二传手会为你照顾。

待办事项通知self.allPeople不仅仅是allPeople不同的,如果你不使用你自己没有访问它的直通setter,你accesing的ivar directly,因此它不会receieve一个retain消息。

+0

所以你永远不会在viewDidLoad或viewWillAppear中初始化ivars?你总是创造获得者? – tazboy

+0

@Tazboy我会在需要的时候初始化它们,除非我想进行延迟加载,否则我通常不会使用getter进行初始化。 viewDidLoad和viewWillAppear是初始化的好地方,但这并不意味着你应该总是在那里初始化,你应该初始化它更有意义的地方。 –

你可能会尝试使你的NSArray成为一个NSMutableArray,这样你可以在你的init调用中分配init。使用属性声明来综合你的getter和setter。至于把你的阵列中的人,你可以将它们添加到每个选择一个可变阵列