以下代码片段有什么区别?
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 的需要,您可以只使用属性定义(这也意味着分配内存来存储与属性关联的值)。
从接口的角度来看,在新的运行时系统上,您提到的两种语法之间没有区别。现在,如果运行时系统以两种不同的方式处理它们,则只能通过检查运行时系统源代码中的实现来说明这一点。我的猜测是,在这个层面上也没有区别。