大括号内的类变量与用@property批注声明的类变量之间的差异



以下代码片段有什么区别?

No. 1

@interface HistoryJsonBean : NSObject
{
}
@property (nonatomic,retain) NSString * unit;

2号

@interface HistoryJsonBean : NSObject
{
    NSString * unit;
}
@property (nonatomic,retain) NSString * unit;

我是新手,以上两个代码真的有区别吗?

第二个有一个名为 unit 的实例变量,第一个没有。

请花点时间阅读"Objective-C 编程语言",该语言位于 Xcode 管理器的"文档"选项卡下。

第一种语法依赖于现代 Objective C 运行时系统的功能,从属性定义创建相应的变量。因此,第二种语法只是用于旧运行时系统的 Objective C 2.0 语法。

也看看S.O.的这篇文章。

编辑:

后一种情况下的变量是 ivar。

属性定义最初只是为其 ivar 定义访问器方法的简短方法(使用适当的内存管理)。较新的运行时系统放宽了声明 ivar 的需要,您可以只使用属性定义(这也意味着分配内存来存储与属性关联的值)。

从接口的角度来看,在新的运行时系统上,您提到的两种语法之间没有区别。现在,如果运行时系统以两种不同的方式处理它们,则只能通过检查运行时系统源代码中的实现来说明这一点。我的猜测是,在这个层面上也没有区别。

最新更新