只读属性、方法和点语法



请启发我以下内容:

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),有些代码甚至在使用句点时也会使用括号。

最新更新