iPhone - 关于@property的问题

时间:2010-12-28 05:42:23

标签: iphone objective-c

我是Objective-C的新手,我正在查看代码,尝试理解一些事情,并且我遇到了这个.h文件:

在@interface部分有一个类似的声明

MyVideoClass *contrast_;

然后我们有

@property (nonatomic, retain) MyVideoClass *contrast;
@property (nonatomic, retain) FetchClass *fetchMe;

奇怪的是,第一个在名字后面有一个下面的内容,第二个有下面的内容,没有。

另一件奇怪的事情就是这个人打电话给这些属性:

FetchClass *fetchOne = [self.fetchMe contrast];

那是什么样的电话?这对我来说似乎很疯狂。我根本无法理解这里发生了什么,但代码有效。非常疯狂。

你们可以解释一下吗?原谅这个愚蠢的问题,但我还在学习......

感谢

2 个答案:

答案 0 :(得分:2)

检查实施文件的顶部;你应该看到一行

@synthesize contrast = contrast_;

这样做的原因是确保您通过其setter和getter(使用@synthesize创建)访问属性,而不是直接访问。

在第二段代码中,self.fetchMe使用其setter获取fetchMe_属性。如果这个人忘记使用self.并简单地写了

FetchClass *fetchOne = [fetchMe contrast];

他会收到错误,因为fetchMe不存在(但fetchMe_确实存在)。与所有事情一样,由您决定是否使用保护。

答案 1 :(得分:1)

此:

FetchClass *fetchOne = [self.fetchMe contrast];

完全等同于以下任何一项:

FetchClass *fetchOne = self.fetchMe.contrast;
FetchClass *fetchOne = [[self fetchMe] contrast];

也就是说,.等同于方法调用。