2010-01-09 90 views

回答

16

你问简单来说:

@property在 类的头声明属性

@property (nonatomic, retain) NSString *myString; 

@synthesize创建是你的setter和 吸你的财产(访问 方法)

没有合成你必须写 自己的setter和getter FPGA实现,像getMyString或 setMyString(利用你的财产的第一 字符)

山姆:只是一个建议:http://www.cocoadevcentral.com/d/learn_objectivec/是一个非常坚实的资源,了解像属性这样的基础知识。

祝你好运!

+0

是的,但我的应用程序没有它运行良好。那么,他们为什么需要? – 2010-01-09 08:45:25

+0

他们不需要*他们只是用于节省时间和避免错误。 – 2010-01-09 08:46:58

+0

在桌面上可以使用手动内存管理,也可以使用垃圾收集器。手动管理工作正常,但使用垃圾收集很有用,节省时间并减少错误。 – Abizern 2011-06-03 01:16:04

6

属性和合成访问器是Objective-C 2.0中的新功能。

当你声明一个@property时,你声明了一个实例var。然后你访问该方法的属性(即getter和setter)。

如果您有兴趣,还有@dynamic访问器。

你应该真的在这做你的功课。苹果有这个漂亮的pdf。

+0

你可以把我链接到pdf吗? – 2010-01-09 08:52:58

+5

我为你搜索:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/ObjC。pdf – Eimantas 2010-01-09 08:57:39

+0

欢呼Eimantas – 2010-01-09 09:27:15

0

默认情况下,我们所有的变量都是私有的,所以我们不能从类中取出。 如果我们想在课堂外使用我们的实例变量。 当你声明一个@property时,你声明了一个实例var。然后你访问该方法的属性(即getter和setter)。

如果您有兴趣,还有@dynamic访问器。

2

想想都Objective-C的魔术只是一个“聪明宏”,像一个“智能#define语句:”如果你注意的是始终在.h文件 @property, @synthesize总是在M档。 所以在后台 @property(无论)NSString * myString;

成为2个方法和一个私有变量的声明;

void set_myString:(NSString *) str; 
(NSString*) get_myString; 

声明在头文件

让他们做一些事情,当你在 @synthesize的myString键入他们实现加入到M档; 变成类似 void set_myString:(NSString *)str { myString = str; }

(NSString *) get_myString 
{ 
    return (myString); 
} 

但它取决于如果你说“保留”,“强”或“弱” 它要么指针刚刚回归的myString或将在myString的复制到一个新的比这 更聪明对象

因此,所有这些都是由编译器通过阅读您的声明自动完成的。 这是非常有用的,可以节省很多时间

0

它只是在它自己的类中设置属性的设置器变量名称。 例如让我说我有这个:@property (nonatomic, copy) NSArray* viewControllers;

那么,如果我想访问setter _viewController我不会设置合成变量。 但如果我想通过名称viewController而不是_viewController访问viewController变量,我会做@synthesize viewController;

如果我想用它作为一个完全不同的名字,我可以这样做@synthesize viewControllers = viewControlololer;但这只是一个setter。你会注意到[self viewControllers]只有作品,而不是[self viewControlololer];

所以我不明白为什么每个人都写集属性的“setter和getter”。它根本不会改变getter变量......除非这意味着[self viewController]意识到viewControlololer(显然)。

0

其实属性是隐式或显式合成的。属性是隐式合成的。因此,除非想将变量的名称更改为与_property_name不同的名称,否则不需要使用合成。

还有其他用例,例如如果你不想让实例变量支持你的属性。

通过使用@synthesized指令显式合成属性。

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

相关问题