声明实例变量nonproperty和属性相同的名称

时间:2013-09-13 03:06:17

标签: objective-c

为什么在许多片段代码中声明实例变量和为什么?财产和非财产有什么不同

#import <Foundation/Foundation.h>

@interface class1:NSObject

{
   NSMutableString *currentData;
}
@property (nonatomic, retain) NSMutableString * currentData;

1 个答案:

答案 0 :(得分:1)

您看到的是“旧代码”......但有时您仍需要支持旧版本(例如10.5)。

一个属性只是一个getter和setter(好吧......它取决于你选择的属性:例如readonly只生成一个getter)。 但是一个属性运行(因此它需要)一个实例变量。通常您在实现文件中看到的内容类似于

@implementation class1
@synthesize currentData = currentData;
@end

这意味着创建使用currentData作为变量的getter和setter。

对于较新版本,您不需要创建实例变量,只需键入属性和合成语句即可。在最新的语言版本中,您甚至不需要syntize语句。自动创建名为_propertyName的实例变量(下划线+属性的名称)。

顺便说一下:有时候你仍然需要制作自己的吸气剂和/或定型器。经典命名约定适用(例如- (void)setCurrentData: (NSMutableString*)newData;用于setter,- (NSMutableString*)currentData;用于getter),但属性与之前的规则相同:如果只支持最新的操作系统,则可以编写@property语句并通过使用“强调”变量来确定你的getter和setter ...