2011-08-26 93 views
1

如果我知道,我將使用伊娃我應該分配/初始化它在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

回答

1

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

至於第二個問題,這取決於如何,如果它被聲明爲retain你的財產申報,並設置它像這樣:

self.allPeople = 

你就不必向它發送一個retain消息,因爲合成二傳手會爲你照顧。

待辦事項通知self.allPeople不僅僅是allPeople不同的,如果你不使用你自己沒有訪問它的直通setter,你accesing的ivar directly,因此它不會receieve一個retain消息。

+0

所以你永遠不會在viewDidLoad或viewWillAppear中初始化ivars?你總是創造獲得者? – tazboy

+0

@Tazboy我會在需要的時候初始化它們,除非我想進行延遲加載,否則我通常不會使用getter進行初始化。 viewDidLoad和viewWillAppear是初始化的好地方,但這並不意味着你應該總是在那裏初始化,你應該初始化它更有意義的地方。 –

0

你可能會嘗試使你的NSArray成爲一個NSMutableArray,這樣你可以在你的init調用中分配init。使用屬性聲明來綜合你的getter和setter。至於把你的陣列中的人,你可以將它們添加到每個選擇一個可變陣列

相關問題