【问题标题】:Where should I alloc/init my ivar?我应该在哪里分配/初始化我的 ivar?
【发布时间】:2011-11-04 15:35:24
【问题描述】:

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

【问题讨论】:

标签: iphone initialization allocation instance-variables


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    每当您要使用它时,我都会对其进行初始化。

    至于第二个问题,如果声明为retain,就看你的属性是怎么声明的了,你这样设置:

    self.allPeople =
    

    您不必向它发送保留消息,因为合成的 setter 会为您处理。

    请注意self.allPeopleallPeople 不同,如果您不使用自我,则不会通过setter 访问它,您正在访问ivar directly,因此它不会收到@ 987654327@留言。

    【讨论】:

    • 所以你永远不会在 viewDidLoad 或 viewWillAppear 中初始化 ivars?你总是创建吸气剂?
    • @Tazboy 我在需要时初始化它们,不,我通常不使用 getter 进行初始化,除非我想做延迟加载。 viewDidLoad 和 viewWillAppear 是初始化的好地方,但这并不意味着你应该总是在那里初始化,你应该在更有意义的地方初始化。
    猜你喜欢
    • 2011-02-12
    • 2016-03-26
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多