对于obj-c中的属性,我们是否需要声明实例变量?

时间:2011-05-03 01:39:29

标签: iphone objective-c properties

对于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是否负责为我创建实例变量?

2 个答案:

答案 0 :(得分:5)

您理解正确,@synthesize负责为您创建ivars。 (这是运行时的一项新功能,与64位Mac和iOS设备兼容。)

有什么好处的,就是你可以在class extension中@property并完全隐藏你的iv ..h,将界面与实现完全分开。

您也可以完全删除.h中的“{}”,使其真正干净。

答案 1 :(得分:1)

在苹果文档中找到了这个:

对于现代运行时,如果您不提供实例变量,编译器会为您添加一个