只读属性,方法和点语法

时间:2013-07-14 00:54:40

标签: objective-c properties

请赐教我以下内容:

Q1 - 根据访问该媒体资源时生成的代码,以下三个声明之间的本质区别是什么?

@property (nonatomic, readonly, getter = getMyProp) NSString* myProp;
@property (readonly, getter = getMyProp) NSString* myProp;
- (NSString*) myProp;

Q2 - 在所有情况下[object myProp]是否完全等同于object.myProp(假设编译器没有抱怨)?

Q3 - 如果它们相同,为什么方括号在任何地方都很普遍,特别是在Apple的示例代码中?

谢谢!

1 个答案:

答案 0 :(得分:2)

(1)对于nonatomic,将直接返回该值。对于隐含的atomic,返回值将自动释放(返回前将为retainautorelease d。对于直接方法声明,不会生成任何代码。< / p>

请注意getter=getMyProp完全违反iOS和OS X编程的模式。 Getters不以get为前缀。

(2)[object myProp]object.myProp在代码生成时完全等效。 然而,它们在可待因之前的编译期间不等效。如果object.myProp类型为object,编译器将在id上出错。也就是说,点符号要求明确键入有问题的对象并明确实现所述方法。

(3)大部分示例代码未必更新,并且考虑到dot与括号内的语法是可互换的限制(2)(但您不应该使用id),直到使用括号,甚至根据点。