以下代码片段之间有什么区别?
@interface HistoryJsonBean : NSObject
{
}
@property (nonatomic,retain) NSString * unit;
@interface HistoryJsonBean : NSObject
{
NSString * unit;
}
@property (nonatomic,retain) NSString * unit;
我是新手,上面两个代码之间真的有区别吗?
答案 0 :(得分:3)
第二个有一个名为unit
的实例变量,第一个没有。
请花点时间阅读Xcode组织者的“文档”选项卡下的“Objective-C编程语言”。
答案 1 :(得分:1)
第一种语法依赖于现代Objective C运行时系统的一个特性来从属性定义中创建相应的变量。因此,第二种语法只是与旧运行时系统一起使用的Objective C 2.0语法。
编辑:
后一种情况中的变量是ivar。
属性定义最初只是为其ivar定义访问器方法的短路(具有适当的内存管理)。较新的运行时系统放松了声明ivar的需要,你可以只使用属性定义(这也意味着分配内存来存储与属性相关的值)。
从接口的角度来看,在新的运行时系统上,您提到的两种语法之间没有区别。现在,如果运行时系统处理它们是两种不同的方式,这只能通过检查运行时系统源代码中的实现来说明。我猜这个级别也没有差别。