为什么在许多片段代码中声明实例变量,比如为了什么?财产和非财产有什么不同
#import <Foundation/Foundation.h>
@interface class1:NSObject
{
NSMutableString *currentData;
}
@property (nonatomic, retain) NSMutableString * currentData;
为什么在许多片段代码中声明实例变量,比如为了什么?财产和非财产有什么不同
#import <Foundation/Foundation.h>
@interface class1:NSObject
{
NSMutableString *currentData;
}
@property (nonatomic, retain) NSMutableString * currentData;
您看到的是“旧代码”……但有时您仍然需要支持旧版本(例如 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。 .