请赐教我以下内容:
Q1 - 根据访问该媒体资源时生成的代码,以下三个声明之间的本质区别是什么?
@property (nonatomic, readonly, getter = getMyProp) NSString* myProp;
@property (readonly, getter = getMyProp) NSString* myProp;
- (NSString*) myProp;
Q2 - 在所有情况下[object myProp]
是否完全等同于object.myProp
(假设编译器没有抱怨)?
Q3 - 如果它们相同,为什么方括号在任何地方都很普遍,特别是在Apple的示例代码中?
谢谢!
答案 0 :(得分:2)
(1)对于nonatomic
,将直接返回该值。对于隐含的atomic
,返回值将自动释放(返回前将为retain
和autorelease
d。对于直接方法声明,不会生成任何代码。< / p>
请注意getter=getMyProp
完全违反iOS和OS X编程的模式。 Getters不以get
为前缀。
(2)[object myProp]
和object.myProp
在代码生成时完全等效。 然而,它们在可待因之前的编译期间不等效。如果object.myProp
类型为object
,编译器将在id
上出错。也就是说,点符号要求明确键入有问题的对象并明确实现所述方法。
(3)大部分示例代码未必更新,并且考虑到dot与括号内的语法是可互换的限制(2)(但您不应该使用id
),直到使用括号,甚至根据点。