关于@property的问题

时间:2011-07-22 02:10:02

标签: objective-c ios4 iphone

我是Obj-C的新手,我想问为什么一切都需要写这样的东西?

@property (_something, _something) NSString* name;

@property表示什么? 为什么我们需要把_something放在括号中?

PS:我知道没有_something,它应该是非原子的,保留,复制等等。由于它有很多选项,所以我只是简单地用一个词来表示括号内的内容。 (我在哪里可以获得所有可用选项列表?)

谢谢:D

2 个答案:

答案 0 :(得分:2)

@property表示您正在定义一个属性,该属性位于基本级syntactic sugar,允许您执行variable = object.propertyobject.property = value而不是variable = [object property] }和[object setProperty:value]。如果你真的想要,你可以跳过声明任何属性,直接声明getter和setter方法,运行时几乎不会注意到差异。

括号内的内容会修改属性。许多仅对在@implementation块中使用@synthesize为您创建getter和/或setter实现的属性有用。例如,assign(默认值)表示只设置了值集; retain表示对象集将自动调用其retain方法(并且前一个对象,如果有的话,将调用release);并且copy表示该对象将调用copy

可能的属性列表位于the documentation

答案 1 :(得分:1)

@property指令只是一个承诺,该类为给定的标识符提供访问器。指令后给出的选项(复制,非原子等)指定了访问器的行为方式。这就是它的全部内容。

相关语法包括指令@dynamic@synthesize以及点表示法。这两个指令是互斥的,并告诉编译器您将提供访问器或编译器应分别提供访问器。点符号是Anomie提到的语法糖 - 它用于访问属性,但您不需要正式声明属性来使用它。