不了解Objective c中的基本属性和方法

时间:2014-06-15 12:57:03

标签: objective-c oop

我是Objective C的新手,但对面向对象编程语言有一些了解。

我对以下代码有一点疑问:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{

UIColor *color;

switch (row) {
    case 1:
        color = [UIColor colorWithRed:1.0 green:0.85 blue:2/255.0 alpha:1.0];
        break;
    case 2:
        color = [UIColor greenColor];
        break;
    case 3:
        color = [UIColor darkGrayColor];
        break;
    default:
        color = [UIColor whiteColor];
        break;
}
[[self view] setBackgroundColor:color];

}

我在这里做的只是在选择了某个选择器视图行时更改背景颜色。

有人可以解释最后一行。

当我提到doc时,我发现view和setBackgroundColor属性。

我们通常会调用这样的方法

[Object someMethod];

那么我的概念在哪里出错?一些相关概念的链接将不胜感激。

2 个答案:

答案 0 :(得分:5)

最近,属性被添加到语言中(考虑到Objective-C已有三十多年的历史)。无论您使用点语法表达什么,您还可以使用“旧式”方括号语法表达。例如,如果viewself的属性,则这两种访问方式是等效的:

self.view

[self view]

因此,您的最后一行代码等同于

[self.view setBackgroundColor:color];

设置属性也是如此,除非按照约定,set前缀和初始大小写被添加以提供setter的名称。例如,如果属性被称为backgroundColor,那么将设​​置setter setBackgroundColor:

因此,您可以像这样重写最后一行:

self.view.backgroundColor = color;

答案 1 :(得分:3)

您遇到问题的概念是什么?

self是一个对象 [self view]返回一个视图对象。

[[self view] setBackgroundColor:color];

可以重写:

UIView *aView = [self view];
[aView setBackgroundColor:color];