私有实例变量和类扩展中的属性之间的区别(Objective-c 2.0)

时间:2011-12-22 17:22:49

标签: objective-c properties nonatomic

以下Objective-c 2.0代码段之间存在哪些差异(如果有):

// in MyClass.h
@interface MyClass
@private
    NSString *myString;
@end

// in MyClass.m
@interface MyClass ()
@property (nonatomic, copy) NSString *myString;
@end

@implementation MyClass
@synthesize myString;
@end

1 个答案:

答案 0 :(得分:6)

ivar(第一个)是一个普通变量,无法在其创建的接口的实现范围内访问(如果使用了@private指令)并且没有合成的访问器方法。

属性(第二个)是一个包装的ivar,可以通过实例化一个类来访问,并且合成了访问器方法(如果正在使用@synthesize指令)

MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter