Properties 属性
在面向对象中,对象是有属性的。这样属性和变量一样,保存着对象的状态。其他的对象是可以获取和改变这些状态的。通常是通过使用对象的存取方法。也就是getter和setter方法。
通过 @property 指令可以自动为我们生成存取方法,即getter和setter方法。
这章我们重点介绍,关于属性生命中额各种属性,这些属性会影响getter和setter的行为。而且有些配置会影响属性的内存管理。
The @property Directive @property 指令
首先我们看看,当我们使用@property指令时发生了什么。下面是Car类和他的实现。
// Car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property BOOL running;
@end
// Car.m
#import "Car.h"
@implementation Car
@synthesize running = _running; // Optional for Xcode 4.4+
@end
编译器会为running属性产生getter和setter方法。默认是用属性名,作为getter方法,setter方法是以set开始加上属性名字。
- (BOOL)running {
return _running;
}
- (void)setRunning:(BOOL)newValue {
_running = newValue;
}
使用@property指令生命属性之后,您就可以使用上面提到的方法,就像您在头文件和实现文件中定义了一样。您还可以重写getter和setter方法。但是您可能很少需要这样做。
通过点的形式方法属性,在底层是转化成了getter和setter方法。所以下面你的honda.running 其实调用的是setRunning方法。
// main.m
#import <Foundation/Foundation.h>
#import "Car.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Car *honda = [[Car alloc] init];
honda.running = YES; // [honda setRunning:YES]
NSLog(@"%d", honda.running); // [honda running]
}
return 0;
}
要改变getter和setter方法的行为,我们需要在@property指令之后的括号中添加相应的属性。本章剩余的部分就讲述这些内容