5

以下 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
4

1 回答 1

6

ivar(第一个)是一个普通变量,不能在创建它的接口的实现范围之外访问(如果使用@private 指令)并且没有综合访问器方法。

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

MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter
于 2011-12-22T17:33:26.530 回答