Pure properties 属性

其实 Objective-C 里的属性,是实例变量的一组 get 和 set 方法。在旧版本的编译器里面,如果要声明一个属性的话,你要先创建一个实例变量,然后手动设定 get 和 set 访问器,到了。到了 4.4 版本之后,整个流程被简化了,就不用再手动的创建实例变量的 get 和 set 的访问器,属性会自动帮你做这件事情。

在后面的章节里,你就会发现,我们有非常多的方法来定义属性。当然最简单的就是在实例变量前面写一个 @property,这里也就不再需要我们前面创建实例变量的时候用到的花括号了。具体的写法,我们来看下面这个例子:

@interface Person : NSObject
@property NSString *name;
- (void)printGreeting;
@end

当你想要在你的类里访问这个属性时,有三种方法。

首先我们先来看看最常用的方法,就是下面这个,self. 加上变量名。

我们用这种形式再来写一下 Person.m 文件里 printGreeting 方法:

- (void)printGreeting {
    NSLog(@"Hello, %@!", self.name);
}

然后我们可以在 main.m 文件里这样更新新属性:

Person *person = [Person new];
person.name = @"Taylor";
[person printGreeting];

注意了,我这里用的是 "." 符号,而不是先前的 "->"。"." 符号被称为点运算符,这个看起来就很像 Swift 咯。

第二种方式是调用方法来访问属性:

- (void)printGreeting {
    NSLog(@"Hello, %@!", [self name]);
}

这里新手可能就有一点迷茫了,其实用 self.name 读一个属性的时候,和写 [self name] 是一样的;而当你用 self.name 写一个属性的时候, 和写 [self setName:@“...”] 是一样的。

接着我们可以在 main.m 文件里更新下面的代码:

[person setName:@"Taylor"];

无论你用何种形式创建属性,这些访问器方法都是自动生成的,并且无论你用点语法去读还是去写这些属性,这些方法都会被调用。

比如说你创建了一个叫做 age 的属性,那么就会有一个 age 方法来返回值;还有一个 setAge 方法来设定值,在所的类中都是这样的。

比如之前提到,数组有一个 count 方法,这是因为数组有一个 count 属性,这个属性里包含了 count 方法的访问器。

results matching ""

    No results matching ""