Использование ivars для определения значений свойств внутри класса

Доступ к частному ivar связано со свойством внутри метода класса более эффективно, чем использование его синтезированных методов получения / установки, или эффективность остается такой же? ...Как в:


@implementation MyApp

@synthesize name;

- (void)loadView 
{
    _name = @"Savagewood"; // VS.
    self.name = @"Savagewood";
}

@end

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

2 ответа

Решение

В общем, лучше использовать средства доступа к свойствам, где это возможно, и ограничивать прямое использование переменных экземпляра методами доступа, методами init и dealloc (если вы не используете ARC). И наоборот, избегайте вызова методов доступа в init и dealloc и избегайте использования методов доступа к свойству, которое вы реализуете, в его собственных методах доступа.

Последний фактически вызовет метод setter для свойства name, Если вы переопределите сеттер во что-то вроде

- (void)setName:(NSString*)name {
  NSLog(@"New name: %@", name);
  _name = name;
}

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

С точки зрения стоимости: я бы сказал, что установка ивара дешевле, но сэкономленная вами стоимость практически ничтожна. Мой подход заключается в использовании свойства только при необходимости, например, когда вам нужно KVO для свойства объекта. В противном случае я всегда использую ивар.

Другие вопросы по тегам