黑马程序员——OC 基础:setter和getter方法

本文介绍Objective-C中如何通过setter和getter方法实现成员变量的封装,包括定义、使用及好处,并提供了一个K线类的设计示例。

 1.setter方法(设置器)

    在开发过程中,考虑到安全性的要求,我们一般不再成员变量名前面使用@public@protected等关键字修饰,而是使用set方法来为对象提供成员变量的值。在set方法内部也可以对一些不合理的赋值进行筛选过滤。

    set方法的作用:为外界提供一个设置成员变量的方法

  命名规范:

     1set方法是对象方法,要以”-“开头

     2)方法名必须以set开头

     3set后面跟上成员变量的名称,首字母大写

     4)返回值一定是void

     5)一定要接收一个参数,而且参数类型需要和成员变量的类型一致

     6)形参名不能和成员变量名一样(苹果官方推荐成员变量名前加上_加以区分)

     7set方法的实现中,要用形参给实例变量赋值   

  set方法的好处:

     1)不让数据暴露在外,保证了数据的安全性

     2)对设置的数据进行过滤

 

 2.getter方法(访问器)

 getter方法的作用:为调用者返回对象内部的成员变量

 命名规范:

   1get方法是对象方法,要以”-“开头

   2)一定有返回值,返回值的类型和成员变量的类型一致

   3get方法的方法名是去掉下划线的实例变量名

   4get方法一定没有参数

   5get方法的实现中,返回值一定是实例变量值


使用示例:

#import <Foundation/Foundation.h>


typedef enum{

    sexMale,

    sexFemale

} Sex;

@interface Person : NSObject

{

    // 姓名

    NSString *_name;

    // 年龄

    int _age;

    // 性别

    Sex _sex;

    // 身高

    float _height;

}


// 姓名的settergetter

-(void)setName:(NSString *)name;

-(NSString *)name;


// 年龄的settergetter

-(void)setAge:(int)age;

-(int)age;


// 性别的settergetter

-(void)setSex:(Sex)sex;

-(Sex)sex;


// 身高的settergetter

-(void)setHeight:(float)height;

-(float)height;


@end


@implementation Person


// 姓名的settergetter

-(void)setName:(NSString *)name{

    _name = name;

}

-(NSString *)name{

    return _name;

}


// 年龄的settergetter

-(void)setAge:(int)age{

    _age = age;

}

-(int)age{

    return _age;

}


// 性别的settergetter

-(void)setSex:(Sex)sex{

    _sex = sex;

}

-(Sex)sex{

    return  _sex;

}


// 身高的settergetter

-(void)setHeight:(float)height{

    _height = height;

}

-(float)height{

    return _height;

}


@end


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        // 创建对象

        Person *p = [Person new];

        

        // 给成员变量赋值

        [p setName:@"gamhunter"];

        [p setAge:25];

        [p setSex:sexMale];

        [p setHeight:179.5];

        

        // 访问成员变量

        NSLog(@"%@,%d,%d,%.2f",[p name], [p age], [p sex], [p height]);

        

    }

    return 0;

}


/*

 练习:设计一个K线类:

 最低价格(可读写)

 最高价格(可读写)

 平均价格(只读)

 */

#import <Foundation/Foundation.h>


// K线类的声明

@interface KLine : NSObject

{

    float _minPrice; // 最低价格

    float _maxPrice; // 最高价格

    float _avgPrice; // 平均价格

}

// 最低价格的settergetter

-(void)setMinPrice:(float)minPrice;

-(float)minPrice;


// 最高价格的settergetter

-(void)setMaxPrice:(float)maxPrice;

-(float)maxPrice;


// 平均价格的getter

-(float)avgPrice;


@end


// Kline的实现

@implementation KLine


// 最低价格的settergetter

-(void)setMinPrice:(float)minPrice{

    _minPrice = minPrice;

    _avgPrice = (_maxPrice + _minPrice)/2;

}

-(float)minPrice{

    return _minPrice;

}


// 最高价格的settergetter

-(void)setMaxPrice:(float)maxPrice{

    _maxPrice = maxPrice;

    _avgPrice = (_maxPrice + _minPrice)/2;

}

-(float)maxPrice{

    return _maxPrice;

}


// 平均价格的getter

-(float)avgPrice{

    return _avgPrice;

}


@end


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        // 创建K线对象

        KLine *k = [KLine new];

        

        // k线的成员变量赋值

        [k setMaxPrice:34.5];

        [k setMinPrice:23.4];

        

        // 访问成员变量

        NSLog(@"最高价格:%.2f,最低价格%.2f,平均价格:%.2f", [k maxPrice], [k minPrice], [k avgPrice]);

    }

    return 0;

}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值