Где я должен разместить / инициализировать мой ivar? - PullRequest
1 голос
/ 26 августа 2011

Если я знаю, что я собираюсь использовать ivar, я должен выделить / инициализировать его в viewDidLoad, например:

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

или я должен создать метод получения и выделить / инициализировать там:

- (Group *)allPeople {

    if (allPeople_ != nil)
        return allPeople_;

    allPeople_ = [NSArray arrayWithArray:[[selectedObject people] allObjects]];
    return allPeople_;
}

Я предполагаю, что метод get с оператором if предназначен для отложенной загрузки, что в моем случае мне не нужно было бы делать, потому что я определенно использую self.allPeople в своем коде.

Дополнительный вопрос:

Если я использую метод получения, действительно ли я должен делать это таким образом?

allPeople_ = [[NSArray arrayWithArray:[[selectedObject people] allObjects]] retain];

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Я бы инициализировал его всякий раз, когда вы собираетесь его использовать.

Что касается второго вопроса, это зависит от того, как объявлено ваше свойство, если оно объявлено как retain, и вы задаете его следующим образом:

self.allPeople =

вам не нужно будет отправлять ему сообщение о сохранении, потому что синтезированный сеттер позаботится об этом за вас.

Заметьте, self.allPeople отличается от allPeople, если вы не используете self, вы не получаете к нему доступ через setter, вы получаете доступ к ivar directly, и поэтому оно не получит retain сообщение.

0 голосов
/ 26 августа 2011

Вы можете попытаться сделать NSArray NSMutableArray таким образом, чтобы вы могли выделить init в своем вызове init.Используйте объявления свойств для синтеза ваших методов получения и установки.Что касается размещения людей в вашем массиве, вы можете добавлять их в изменяемый массив каждый раз, когда выбирается один

...