对于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是否负责为我创建实例变量?
答案 0 :(得分:5)
您理解正确,@synthesize
负责为您创建ivars
。 (这是运行时的一项新功能,与64位Mac和iOS设备兼容。)
有什么好处的,就是你可以在class extension中@property并完全隐藏你的iv ..h,将界面与实现完全分开。
您也可以完全删除.h中的“{}”,使其真正干净。
答案 1 :(得分:1)
在苹果文档中找到了这个:
对于现代运行时,如果您不提供实例变量,编译器会为您添加一个