有了obj-c中的属性,我们需要声明实例变量吗?
例如,如果我的 .h 文件如下所示:
@interface MyClass : NSObject {
}
@property (nonatomic, retain) NSNumber *someId;
@property (nonatomic, retain) NSDate *expires;
@property (nonatomic, retain) NSString *someString;
...
这样好吗?它编译并工作,它是“完成的事情”吗?或者我真的应该做以下事情:
@interface MyClass : NSObject {
NSNumber *someId;
NSDate *expires;
NSString *someString;
}
@property (nonatomic, retain) NSNumber *someId;
@property (nonatomic, retain) NSDate *expires;
@property (nonatomic, retain) NSString *someString;
...
如果我打算始终使用属性访问器,上述两种方式有什么区别吗?
@synthesize 是否负责为我创建实例变量?
最佳答案
您理解正确,@synthesize
负责为您创建ivars
。 (这是与 64 位 Mac 和 iOS 设备兼容的运行时的新功能。)
这样做的好处是,您可以在 class extension 中使用 @property并从 .h 中完全隐藏您的 ivar,将接口(interface)与实现完全分离。
您还可以从 .h 中完全删除“{}”,使其真正干净。
关于iphone - 有了 obj-c 中的属性,我们需要声明实例变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864221/