Свойства в Objective C 2.0 требуют, чтобы соответствующая переменная экземпляра была объявлена? Например, я привык делать что-то вроде этого:
MyObject.h
@interface MyObject : NSObject {
NSString *name;
}
@property (nonatomic, retain) NSString *name;
@end
MyObject.m
@implementation
@synthesize name;
@end
Однако, что, если я сделал это вместо этого:
MyObject.h
@interface MyObject : NSObject {
}
@property (nonatomic, retain) NSString *name;
@end
Это все еще допустимо? И это всегда отличается от моего предыдущего примера?
Если вы используете Modern Objective-C Runtime (iOS 3.x или выше, или 64-битный Snow Leopard или выше), то вам не не нужно определять ivars для ваших свойств в такие случаи.
Когда вы @synthesize
свойство, ivar будет фактически синтезирован также для вас. Это позволяет избежать сценария «хрупкого ивара». Вы можете прочитать об этом подробнее на Какао с любовью