Следующее не жалуется ни на компиляцию, ни во время выполнения по поводу name
ivar. Так почему так часто можно увидеть ивара и @property/@synthesize
.
@interface PropTest : NSObject
{
}
@property (retain) NSString *name;
@end
@implementation PropTest
@synthesize name;
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
PropTest *p = [[PropTest new] autorelease];
p.name = @"Hello, World!";
NSLog(@"%@",p.name);
[pool drain];
return 0;
}
Этот код печатает
Hello, World!
На самом деле, если я получаю доступ к p->name
, я получаю предупреждение:
warning: instance variable 'name' is @private; this will be a hard error in the future
, что указывает на то, что для меня создан ивар, если он не существует.
Если это правда, какой смысл создавать ivar вручную (игнорируя очевидное, что иногда есть веские причины не использовать средство доступа g / setter)?
Или по-другому спросить, должен ли я только когда-либо создать ивар для свойства, когда мне нужно обойти методы доступа?