@property @synthesize
@synthesize
和@property
在Xcode中做什么? 请提供一个非常简单的解释吗?
你问了简单的条款:
@property在你的类头中声明一个属性
@property (nonatomic, retain) NSString *myString;
@synthesize为你的属性创build你的setter和getter(访问器方法)
没有综合,你必须编写自己的setter和getter实现,比如getMyString或setMyString(大写属性的第一个字符)
山姆:只是一个build议: http : //www.cocoadevcentral.com/d/learn_objectivec/是一个非常坚实的资源,学习像属性的基础知识。
祝你好运!
属性和合成访问器是Objective-C 2.0中的新特性。
当你声明一个@property
时,你声明了一个实例var。 然后,你@ @synthesize
访问器方法(即getter和setter)该属性。
如果你有兴趣,还有@dynamic
访问器。
你应该真的在这做你的功课。 苹果有这个漂亮的PDF。
把所有的Objective-C魔术想象成一个“聪明的macros”,就像一个“聪明的#define语句”@property,如果你注意到总是在h文件中,@synthesize总是在m文件中。 所以在后台@property(无论)NSString * myString;
成为2个方法和一个私有variables的声明;
void set_myString:(NSString *) str; (NSString*) get_myString;
在头文件中的声明
让他们做一些他们的实现添加到m文件中,当你input@synthesize myString; 这就像void set_myString:(NSString *)str {myString = str; }
(NSString *) get_myString { return (myString); }
但它比这更聪明取决于如果你说“保留”“强”或“弱”它将只是返回指针到myString或它将复制myString到一个新的对象
所有这一切都是由编译器自动完成的,只需阅读你的声明。 这是相当有用的,并节省了大量的时间
默认情况下,我们所有的variables都是私有的,所以我们不能从类中取出。 如果我们想在类的外面使用我们的实例variables的话。 当你声明一个@property
时,你声明了一个实例var。 然后,你@ @synthesize
访问器方法(即getter和setter)该属性。
如果你有兴趣,还有@dynamic
访问器。
它只是在它自己的类中设置属性的settervariables名称。 例如让我说我有这个: @property (nonatomic, copy) NSArray* viewControllers;
那么如果我想访问setter _viewController我不会设置合成variables。 但如果我想通过名称viewController
而不是_viewController
访问viewControllervariables,我会做@synthesize viewController;
。
如果我想用它作为一个完全不同的名字,我可以这样做@synthesize viewControllers = viewControlololer;
但那只是一个制定者。 你会注意到[self viewControllers]
只能工作,而不是[self viewControlololer];
所以我不明白为什么每个人都写了一个属性的“setter和getter”。 它根本不会改变gettervariables,除非这意味着[self viewController]
意识到viewControlololer
(显然)。
实际上,属性是被隐式地或明确地合成的。 属性是隐式合成的。 所以没有必要使用合成,除非你想把variables的名字改成与_property_name不同的东西。
还有其他用例,例如,如果你不想要一个实例variables来支持你的属性。
属性通过使用@synthesized指令显式合成。
(答案摘自大书呆子牧场指南)