Перезаписывающие сеттеры для сохранения свойств - PullRequest
2 голосов
/ 02 августа 2011

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

-(void)setMasterViewController:(UIViewController *)newMaster {
    [newMaster retain];
    [masterViewController release];
    masterViewController = newMaster;

    // do custom stuff on set
}

Есть ли способ получить доступ к установщику по умолчанию, например:

-(void)setMasterViewController:(UIViewController *)newMaster {
    [defaultSetMasterViewController:newMaster];
    // do custom stuff
}

Это сохранит код СУШКИ.То, как я это делаю сейчас, дважды упоминается тот факт, что это свойство retain.

Ответы [ 2 ]

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

CoreData генерирует примитивные сеттеры, но в целом такой возможности нет.В некоторых случаях вы можете заменить пользовательские сеттеры наблюдением значения ключа, но решением вашего конкретного вопроса, вероятно, будет «использовать ARC», если вы можете ограничить поддержку до 10,6 + / 4,3 +.Он будет обрабатывать информацию о сохранении / выпуске от вашего имени.

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

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

Однако ... Да, если вы используете ARC ! Если у вас есть @property (strong), тогда, когда вы просто скажете, masterViewController = newMaster ARC будет использовать objc_storeStrong, что:

Выполняет полную последовательность для присвоения объекту __strong неблокированного типа. Эквивалентен следующему коду:

id objc_storeStrong(id *object, id value) {
  value = [value retain];
  id oldValue = *object;
  *object = value;
  [oldValue release];
  return value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...