Инициализация подкласса UIViewController - PullRequest
0 голосов
/ 04 июня 2009

Скажем, у меня есть FooController подкласс UIViewController, который отображает список Foo с. Как лучше всего справляться с жизненным циклом моего foo свойства?

Определить ли @property как чтение / запись? На самом деле это не так - как только он установлен, его изменение может привести к противоречивому состоянию. Создать ли @property как readonly и написать новый назначенный инициализатор initWithFoo:(Foo *) aFoo, который вызывает initWithNibName:bundle:? Теперь мне нужно создавать новый экземпляр каждый раз, когда контроллер извлекается из стека и добавляется с новым foo.

Последнее мне кажется подходом, но я никогда не видел, чтобы кто-нибудь делал это. Так что же такое стандартная практика?

Ответы [ 2 ]

3 голосов
/ 04 июня 2009

Свойства, как правило, путь. Они дают вам силу KVC / KVO

Вы должны установить класс в качестве наблюдателя свойства Foo (KVO). Тогда каждый раз, когда Foo меняется, у вас есть шанс с этим справиться. Не нужно беспокоиться о несоответствии.

        [self addObserver:self forKeyPath:@"foo" options:0 context:@"fooChanged"];

Тогда наблюдайте за изменением:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

     if([keyPath isEqualToString:@"foo"]){

       //do your thing


    }
}

Теперь не имеет значения, установлен ли foo в инициализаторе или через некоторое время, вы можете справиться с этим. Вы не хотите, чтобы ваш код прерывался, заставляя любые объекты работать с вашим классом в предопределенном порядке. Это очень негибкая и, как правило, плохая практика. Таким образом, вы можете изящно справиться с этими изменениями.

0 голосов
/ 04 июня 2009

Objective-C - это динамический язык. Так что не будь так строг в инкапсуляции. Этот ивар мог быть достигнут, думал KVC так или иначе. Так что @ property (readwrite) в порядке.

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