Ниже не комментируется компиляция или время выполнения без name
ivar. Так почему так часто встречается с 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, если он не существует.
Если это правда, то, что точка создания ivar вручную (игнорируя очевидное, что иногда существуют веские причины не использовать g/setter accessor)?
Или спросил иначе, должен ли я когда-либо создавать ivar для свойства, когда мне нужно обходить аксессоров?