iphone - 有了 obj-c 中的属性,我们需要声明实例变量吗?

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

最佳答案

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

这样做的好处是,您可以在 class extension 中使用 @property并从 .h 中完全隐藏您的 ivar,将接口(interface)与实现完全分离。

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

关于iphone - 有了 obj-c 中的属性,我们需要声明实例变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864221/

相关文章:

java - 将文件加载到 jar 中

jQuery 1.6 类型属性未定义

iphone - 如何在 iOS 中勾选 UIButton?

iphone - NSPredicate 过滤器数组,用于 NSDate

iphone - 如何在 iPhone 应用程序中使用 FB Graph 搜索 API

iOS Google map sdk 方法 "idleAtCameraPosition"未被调用

iphone - iPhone 应用程序中的音频反馈问题

php - 如果照片上传成功

ios - 从库中选择图像不会调用 "didFinishPickingImage"函数 - Swift

'First or Default'/objects 的 Javascript 'associative arrays' 函数