@property, сеттер и геттер вопрос? - PullRequest
1 голос
/ 22 марта 2010
NSString *statusValue;
NSString *currentValue;

@property(retain, nonatomic) NSString *statusValue;
@property(retain, nonatomic) NSString *currentValue;

@synthesize statusValue;
@sythnesize currentValue;

Учитывая вышесказанное, если я устанавливаю одну переменную в другую, мне следует делать ...

[self setStatusValue: currentValue];

или мне следует снова использовать свойство и использовать ...

[self setStatusValue: [self currentValue]];

Полагаю, что последнее (хотя, может быть, и избыточное) действительно говорит читателю, что мы используем одну из переменных экземпляра объекта, а не какую-то локальную переменную.один, но просто хотел проверить, прежде чем кто-то посмотрел на мой код и когда "какого черта" :))

Гари

Ответы [ 3 ]

3 голосов
/ 22 марта 2010

Оба работают просто отлично. Какой из них вы используете, может зависеть от побочных эффектов, которые вы хотите. Например, используя [self currentValue], вы можете отключить уведомления willAccessValueForKey: и didAccessValueForKey: KVO, но только если кто-то действительно наблюдает это свойство, и только если это подкласс NSManagedObject. Обычно никаких серьезных побочных эффектов нет.

Лично я бы, вероятно, использовал последний пример, просто чтобы мне не пришлось беспокоиться об изменении имени iVar в 30 местах, если я решу его изменить (конечно, инструмент Refactor-> Rename было бы право использовать в этой ситуации, но все же).

2 голосов
/ 22 марта 2010

Я пользуюсь последним, если нет веских причин не делать этого.Таким образом, он работает с переопределенными средствами доступа, измененными реализациями и т. Д. Без каких-либо изменений.Например, может быть, я решил отказаться от сохранения statusValue в виде строки и вместо этого сохранить объект Status с помощью statusValue.Если я везде получаю доступ к ивуру, я должен изменить их все.Если вместо этого я прохожу через открытый интерфейс класса, мне нужно изменить только один метод доступа.

0 голосов
/ 22 марта 2010

Это работает и более выразительно ИМО:

self.statusValue = currentValue;

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