1.setter方法(设置器)
在开发过程中,考虑到安全性的要求,我们一般不再成员变量名前面使用@public、@protected等关键字修饰,而是使用set方法来为对象提供成员变量的值。在set方法内部也可以对一些不合理的赋值进行筛选过滤。
set方法的作用:为外界提供一个设置成员变量的方法
命名规范:
1)set方法是对象方法,要以”-“开头
2)方法名必须以set开头
3)set后面跟上成员变量的名称,首字母大写
4)返回值一定是void
5)一定要接收一个参数,而且参数类型需要和成员变量的类型一致
6)形参名不能和成员变量名一样(苹果官方推荐成员变量名前加上_加以区分)
7)set方法的实现中,要用形参给实例变量赋值
set方法的好处:
1)不让数据暴露在外,保证了数据的安全性
2)对设置的数据进行过滤
2.getter方法(访问器)
getter方法的作用:为调用者返回对象内部的成员变量
命名规范:
1)get方法是对象方法,要以”-“开头
2)一定有返回值,返回值的类型和成员变量的类型一致
3)get方法的方法名是去掉下划线的实例变量名
4)get方法一定没有参数
5)get方法的实现中,返回值一定是实例变量值
使用示例:
#import <Foundation/Foundation.h>
typedef enum{
sexMale,
sexFemale
} Sex;
@interface Person : NSObject
{
// 姓名
NSString *_name;
// 年龄
int _age;
// 性别
Sex _sex;
// 身高
float _height;
}
// 姓名的setter和getter
-(void)setName:(NSString *)name;
-(NSString *)name;
// 年龄的setter和getter
-(void)setAge:(int)age;
-(int)age;
// 性别的setter和getter
-(void)setSex:(Sex)sex;
-(Sex)sex;
// 身高的setter和getter
-(void)setHeight:(float)height;
-(float)height;
@end
@implementation Person
// 姓名的setter和getter
-(void)setName:(NSString *)name{
_name = name;
}
-(NSString *)name{
return _name;
}
// 年龄的setter和getter
-(void)setAge:(int)age{
_age = age;
}
-(int)age{
return _age;
}
// 性别的setter和getter
-(void)setSex:(Sex)sex{
_sex = sex;
}
-(Sex)sex{
return _sex;
}
// 身高的setter和getter
-(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; // 平均价格
}
// 最低价格的setter和getter
-(void)setMinPrice:(float)minPrice;
-(float)minPrice;
// 最高价格的setter和getter
-(void)setMaxPrice:(float)maxPrice;
-(float)maxPrice;
// 平均价格的getter
-(float)avgPrice;
@end
// Kline的实现
@implementation KLine
// 最低价格的setter和getter
-(void)setMinPrice:(float)minPrice{
_minPrice = minPrice;
_avgPrice = (_maxPrice + _minPrice)/2;
}
-(float)minPrice{
return _minPrice;
}
// 最高价格的setter和getter
-(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;
}
本文介绍Objective-C中如何通过setter和getter方法实现成员变量的封装,包括定义、使用及好处,并提供了一个K线类的设计示例。
1171

被折叠的 条评论
为什么被折叠?



