getter-setter方法练习

//
//  Kline.h


#import <Foundation/Foundation.h>

@interface Kline : NSObject
{
    int _max; // 最高价
    int _min;// 最低价
    int _average;// 平均价
}
/*
 setter方法
 1. 一定是对象方法
 2. 一定没有返回值
 3. 方法名称一定以set开头, 后面跟上成员变量的名称并且去掉下划线, 然后首字母大写
 4.一定有参数, 参数类型一定和成员变量一样, 参数名称就是成员变量的名称去掉下划线
 */
- (void)setMax:(int)max;
- (void)setMin:(int)min;

/*
 如果某一个属性只提供了getter方法, 没有提供setter方法, 我们称这个属性为只读属性
 如果某一个属性只提供了setter方法, 没有提供getter方法, 我们称这个属性为只写属性
 如果某一个属性同时提供了setter方法和getter方法, 我们称这个属性为可读可写的属性
 如果某一个属性没有提供了getter和setter,  我们称这个属性为私有属性
 */
//- (void)setAverage:(int)average;
/*
 getter方法
 1. 一定是对象方法
 2. 一定有返回值, 返回值类型和成员变量的类型一致
 3. 方法名称就是成员变量的名称去掉下划线
 4. 一定没有参数
 */
- (int)min;
- (int)max;
- (int)average;

@end
//
//  Kline.m


#import "Kline.h"

@implementation Kline

- (void)setMax:(int)max
{
    _max = max;
//    self.max = 10;
    // 每次重新设置最大值, 那么就重新计算平均值
    _average = (_min + _max) / 2;
}

- (void)setMin:(int)min
{
    // setter方法还有一个好处: 监听属性的变化
    _min = min;
    // 每次重新设置最小值, 那么就重新计算平均值
    _average = (_min + _max) / 2;
}


- (void)setAverage:(int)average
{
    _average = average;
}

- (int)min
{
    return _min;
}

- (int)max
{
    return _max;
}

- (int)average
{
//    NSLog(@"重新计算平均值");
    //这个地方有性能问题,由于最大值和最小值可能没有发生变化,既然最大值和最小值没有发生变化,那么平均值就不需要重新计算
    //只有最大值和最小值发生变化才需要重新计算
//    return (_max + _min) / 2;
    return _average;
}
@end
//  main.m


#import <Foundation/Foundation.h>
#import "Kline.h"
/*
 设计一个K线类, 有三个属性, 最高价格, 最低价格, 平均价格. 要求可以设置和获取这三个属性
 */
int main(int argc, const char * argv[]) {
    
    // 1.创建K线类
    Kline *line = [Kline new];
    // 2.设置属性
    [line setMax:200];
    [line setMin:100];
//    [kp setAverage:<#(int)#>]
    // 3.获取属性的值
    NSLog(@"min = %i, max = %i, average = %i", [line min], [line max], [line average]);
    
    [line average];
    [line average];
    [line average];
    [line average];
    return 0;
}
原文地址:https://www.cnblogs.com/xufengyuan/p/6543564.html