请启发我以下内容:
Q1-就访问属性时生成的代码而言,下面三个声明之间有什么本质区别?
@property (nonatomic, readonly, getter = getMyProp) NSString* myProp;
@property (readonly, getter = getMyProp) NSString* myProp;
- (NSString*) myProp;
Q2-[object myProp]
在任何情况下都完全等价于object.myProp
吗(假设编译器没有抱怨)?
Q3-如果它们是等效的,为什么方括号形式在所有地方都很流行,尤其是在苹果的示例代码中?
谢谢!
(1)对于nonatomic
,将直接返回值。对于隐含的atomic
,返回值将自动释放(在返回之前将是retain
d和autorelease
d。对于直接方法声明,将不会生成代码。
请注意,getter=getMyProp
完全反对iOS和OSX编程模式。Getter不以get
为前缀。
(2) [object myProp]
和CCD_然而,它们在编解码器之前的编译过程中是不等效的。如果object
的类型为id
,编译器将在object.myProp
上出错。也就是说,点表示法要求有问题的对象是显式类型的,并明确地实现所述方法。
(3) 大部分示例代码不一定已经更新,而且,考虑到句点与括号语法是可互换的,除非(2)(但无论如何都不应该使用id
),有些代码甚至在使用句点时也会使用括号。