-1

请赐教以下几点:

Q1 - 就访问属性时生成的代码而言,以下三个声明之间的本质区别是什么?

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

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

Q3 - 如果它们是等价的,为什么方括号形式无处不在,尤其是在 Apple 的示例代码中?

谢谢!

4

1 回答 1

2

(1) 对于nonatomic,直接返回值。对于隐含atomic的,返回值将被自动释放(将在返回之前被retained 和autoreleased 处理。对于直接方法声明,不会生成任何代码。

请注意,这getter=getMyProp完全违背了 iOS 和 OS X 编程的模式。Getter 不以 . 为前缀get

(2)[object myProp]并且object.myProp在代码生成时是完全等价的。 但是,在可待因之前的编译过程中,它们并不等效。object.myProp如果object是类型,编译器会出错id。也就是说,点表示法要求所讨论的对象是显式类型的,并且明确地实现了所述方法。

(3) 大部分示例代码不一定已更新,并且鉴于点与括号语法是可互换的,除非 (2) (但您id无论如何都不应该使用),有些直到使用括号,即使在点的光.

于 2013-07-14T01:27:08.767 回答