1

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

1号

@interface HistoryJsonBean : NSObject
{
}

@property (nonatomic,retain) NSString * unit;

2号

@interface HistoryJsonBean : NSObject
{
    NSString * unit;
}

@property (nonatomic,retain) NSString * unit;

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

4

2 回答 2

3

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

请花点时间阅读“The Objective-C Programming Language”,它位于 Xcode 管理器的“文档”选项卡下。

于 2012-04-16T14:32:46.177 回答
1

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

也看看SO的这篇文章

编辑:

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

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

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

于 2012-04-16T14:38:07.297 回答