差(目标c 2.0)
问题描述:
哪些以下目标c 2.0代码段之间的差异(如果有的话):差(目标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
答
ivar(第一个)是一个普通变量,不能在创建的接口的实现范围之外访问(如果使用@private指令)并且没有合成访问器方法。
的性质(第二个)是一种包裹的ivar和东西,可以总是通过实例化一个类访问,并具有合成存取方法(如果正在使用@synthesize指令)
MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter
在第二种情况下,我不要认为myString的综合getter/setter可以在实现范围之外访问。注意它们是在实现文件中的类扩展中。 – SundayMonday 2011-12-22 17:45:06
对不起,我错过了那部分。后者被认为是在私人部分(与Apple的私有API相同,如UIView的-recirsiveDescription)。但它们仍然可以通过访问器方法访问,尽管编译器会生成警告。第一个将不可访问,因为编译器会产生错误。 – Eugene 2011-12-22 18:32:51