Раньше я всегда видел пример использования свойств и iVars, как это...
Внутри SomeClass.h
@interface SomeClass : NSObject {
NSString *_someString;
}
@property NSString *someString;
@end
Затем в SomeClass.m
#import "SomeClass.h"
@implementation SomeClass
@synthesize someString = _someString;
@end
Совсем недавно (в видеороликах WWDC 2012) я слышал, что нам больше не нужен @synthesize
, и он рекомендовал просто использовать @property
без связанного с ним iVar.
Итак, вышесказанное изменилось бы на...
SomeClass.h
@interface SomeClass : NSObject
@property NSString *someString;
@end
SomeClass.m
#import "SomeClass.h"
@implementation SomeClass
@end
Это просто использование @property
и no ivar. Это имеет смысл, и я использовал его.
Однако я также видел примеры...
SomeClass.h
@interface SomeClass : NSObject
@end
SomeClass.m
#import "SomeClass.h"
@interface SomeClass () {
NSString *someString;
}
@end
@implementation SomeClass
@end
В этом они просто имеют частный iVar
и не @property
.
И какая разница? Я понимаю, что @property
также предоставляет методы доступа, но вам не нужно переопределять методы доступа. Вы можете просто использовать устройства доступа по умолчанию.
Итак, когда вы будете использовать @property, а не ivar, и когда вы будете использовать только ivar, а не @property
? И почему бы вам просто не избавиться от иваров и просто использовать @properties
? Если они должны быть закрытыми, просто используйте их внутри расширения интерфейса в .m.
Быстрое редактирование в ответ на ответ об управлении памятью. Я использую ARC, и для меня кажется, что я больше контролирую управление памятью с использованием strong
и weak
@properties
, чем с iVars.
Надеюсь, этот вопрос достаточно ясен.
Спасибо