Object-C 属性

Properties 属性

在面向对象中,对象是有属性的。这样属性和变量一样,保存着对象的状态。其他的对象是可以获取和改变这些状态的。通常是通过使用对象的存取方法。也就是getter和setter方法。

Interacting with a property via accessor methods

通过 @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指令之后的括号中添加相应的属性。本章剩余的部分就讲述这些内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值