Использование 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 для свойства объекта. В противном случае я всегда использую ивар.