《Objective-C编程 第二版》笔记7:属性

声明属性可以简化存取方法。

1、声明属性

笔记6中的实例变量可以改成属性的声明,声明为属性就可以省略存取方法的书写。

#import <Foundation/Foundation.h>

@interface BNRPerson : NSObject
//属性的声明
@property (nonatomic) float heightInMeters;
@property (nonatomic) int weightInKilos;


/*{
    float _heightInMeters;
    int _weightInKilos;
}

- (float)heightInMeters;
- (void) setHeightInMeters:(float)h;
- (int) weightInKilos;
- (void) setWeightInKilos:(int)w;
*/

- (float) bodyMassIndex;

@end

.m文件

#import "BNRPerson.h"

@implementation BNRPerson
//注释掉了所有的存取方法
/*
- (float) heightInMeters
{
    return _heightInMeters;
}

- (void) setHeightInMeters:(float)h
{
    _heightInMeters = h;
}

- (int) weightInKilos
{
    return _weightInKilos;
}

- (void) setWeightInKilos:(int)w
{
    _weightInKilos = w;
}
*/
- (float) bodyMassIndex
{
    float h = [self heightInMeters];
    return [self weightInKilos] / (h * h);
}
@end

2、属性的特性

属性的特性显示的@property后面的括号中。多个特性用逗号分割。

nonatomic表示为非原子属性,原子性是默认属性。

readonly表示为只读属性。该属性不会生成存方法。

readwrite是读/写属性,这个也是默认的属性。

copy可拷贝属性。每当声明一个指向NSString或NSArray对象的属性时,都需要设置copy属性。

属性的生命周期类型

包括unsafe_unretained、assign、strong、weak和copy。

    assign是默认的。可以使用assign特性来保存非对象类型的实例变量。

    strong特性。要求保留传入的对象,并放弃原有对象(如果原有对象不再有其他拥有方,就会被释放)。凡是指向对象的实例变量,通常都应该使用strong特性。

    weak特性要求不保留传入的对象。如果该对象被释放,那么相应的实例变量会被自动赋为nil。

    unsafe_unretained特性和weak类似。但是,如果该对象被释放,那么相应的实例变量不会被自动赋为nil。

    copy特性要求拷贝传入的对象,并将新对象赋给实例变量。

copy

    copy特性要求拷贝传入的对象,并将新对象赋给实例变量。

@property (copy) NSString *lastName;

等同于

- (void) setLastName:(NSString *)d

{

    lastName = [d copy];

}

    对于可以修改的类,最适合使用copy特性。

3、用点号调用存取方法

以下两行代码是完全相同的

float w = mikey.weightInKilos;

float w = [mikey weightInKilos];

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值