1

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

#import <Foundation/Foundation.h>

@interface class1:NSObject

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

1 回答 1

1

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

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

@implementation class1
@synthesize currentData = currentData;
@end

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

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

顺便说一句:有时您仍然需要制作自己的 getter 和/或 setter。经典命名约定适用(例如- (void)setCurrentData: (NSMutableString*)newData;setter 和- (NSMutableString*)currentData;getter),但属性规则与以前相同:如果您只支持最新的操作系统,您可以编写@property语句并使用“带下划线”的变量来纠正您的 getter 和 setter。 .

于 2013-09-13T07:00:23.077 回答