@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指令显式合成。

(答案摘自大书呆子牧场指南)