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 实际上也会为您合成。这绕过了“脆弱的ivar”场景。您可以在 Cocoa with Love 上阅读更多相关信息
https://stackoverflow.com/questions/3074248/