我应该在哪里分配/初始化我的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];
我会初始化它,只要你打算使用它。
至于第二个问题,这取决于如何,如果它被声明为retain
你的财产申报,并设置它像这样:
self.allPeople =
你就不必向它发送一个retain消息,因为合成二传手会为你照顾。
待办事项通知self.allPeople
不仅仅是allPeople
不同的,如果你不使用你自己没有访问它的直通setter
,你accesing的ivar directly
,因此它不会receieve一个retain
消息。
所以你永远不会在viewDidLoad或viewWillAppear中初始化ivars?你总是创造获得者? – tazboy
@Tazboy我会在需要的时候初始化它们,除非我想进行延迟加载,否则我通常不会使用getter进行初始化。 viewDidLoad和viewWillAppear是初始化的好地方,但这并不意味着你应该总是在那里初始化,你应该初始化它更有意义的地方。 –
你可能会尝试使你的NSArray成为一个NSMutableArray,这样你可以在你的init调用中分配init。使用属性声明来综合你的getter和setter。至于把你的阵列中的人,你可以将它们添加到每个选择一个可变阵列
对于额外的问题:http://stackoverflow.com/questions/3924463/how-is-retain-setter-用合成器实现/ 3925204#3925204 – jv42
对不起,我的意思是说getter,而不是setter。 – tazboy