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