【问题标题】:What is the different between Instance variable vs property ?实例变量与属性有什么区别?
【发布时间】:2010-11-28 22:26:37
【问题描述】:

我见过很多这样的代码:

@interface Test0 : NSObject {
        @private int iVar;
}
@property (readwrite,assign) int iVar;
@end

还有一些其他代码:

@interface Test0 : NSObject {
}
@property (readwrite,assign) int iVar;
@end

我知道您使用@synthesize iVar 告诉编译器为属性iVar 生成getter 和setter 方法。

我的问题: 我们需要声明@private int iVar; 实例变量吗? 这样做有什么好处?声明实例变量与属性的最佳实践是什么? 编译器是否将实例变量与属性链接?

提前致谢。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    使用非脆弱基类的现代 Objective-C 运行时和编译器(IIRC,OS X 上的 64 位运行时和 iOS 4.0 及更高版本的运行时)允许您省略实例变量。较旧的运行时需要您的第一个示例,而现代运行时则需要后一个示例。

    【讨论】:

    • 感谢您的澄清,所以为了最佳实践和安全起见,我应该始终使用第一种方法?
    • @Unis,如果您只针对现代运行时,最佳做法可能是跳过实例变量;代码越少越好。如果您需要与较旧的运行时兼容,则别无选择,只能声明实例变量。
    • 跳过 ivar 声明可能会更好,因为它使头文件看起来不那么混乱。
    猜你喜欢
    • 2010-10-23
    • 2021-12-26
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多