- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
getter\setter方法 进一步了解
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
适合所有人,不需要懂的什么
注:(小白直接上手)
一、本章笔记
setter 方法的另一个好处, 可以监听属性的变化
二、code
main.m
Main.m
#pragma mark 03-geeter-setter方法练习
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
/*
设计一个K线类, 有三个属性,最高价格,最低价格,平均价格,要求可以设置和获取这三个属性
*/
#import "KLine.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
KLine *line = [KLine new];
[line setMax:200];
[line setMin:100];
NSLog(@"max = %i, min = %i, arerage = %i",[line max],[line min],[line average]);
[line average]; // 如果直接 返回 (max + min) / 2 计算平均值,会影响性能, 直接修改setter方法的时候 直接赋值即可
[line average];
[line average];
[line average];
[line average];
[line average];
return 0;
}
Kline
>>>.h
#import <Foundation/Foundation.h>
@interface KLine : NSObject
{
int _max; // 最高价格
int _min; // 最低价格
int _average; // 平均价
}
#pragma mark getter / setter 方法
/*
setter方法 :
1.移动是对象方法
2.一定没有返回值
3.方法名称 一定以 set开头,后面跟上需要设置的属性的名称 去掉下划线,然后首字母大写
4.一定有参数,参数类型 和 需要设置的属性类型 一致,并且参数名称 就是属性名称 去掉下划线
*/
- (void)setMax:(int)max;
- (void)setMin:(int)min;
- (void)setAverage:(int)average;
/*
getter方法 :
1.一定是对象方法
2.一定有返回值,返回值类型 一定 和属性类型一样
3.方法名称 就是属性名称 去掉 下划线
4.一定没有参数
*/
- (int)max;
- (int)min;
- (int)average;
#warning 注意点
/*
如果某一个属性 只提供了getter方法 ,没有提供setter方法, 我们称这个属性为 只读属性
如果某一个属性 只提供了setter方法 ,没有提供getter方法, 我们称这个属性为 只写属性
如果某一个属性 同时 提供了 getter 和 setter方法, 我们称这个属性 可读可写属性
如果某一个属性 没有提供getter 和 setter方法, 我们称这个属性为私有属性
*/
@end
>>>.m
#import "KLine.h"
@implementation KLine
- (void)setMax:(int)max
{
_max = max;
// setter 方法的另一个好处, 可以监听属性的变化
_average = (_max + _min) / 2;
}
- (void)setMin:(int)min
{
_min = min;
_average = (_max + _min) / 2;
}
- (void)setAverage:(int)average
{
_average = average;
}
- (int)max
{
return _max;
}
- (int)min
{
return _min;
}
- (int)average;
{
// 这个地方 有性能问题, 由于最大值 和 最小值 可能没有发生变量, 既然最大值 和 最小值没有发生变化,那么平均值 就不需要重新计算
// 只有最大值 和 最小值发送变量 才需要重新计算
// return (_max + _min) / 2;
return _average;
}
@end