标签:
今天主要学习的setter和getter的使用方法, 按照昨天所学习的内容,首先我们要创建一个工程,另外在创建一个Person类!
=================================================================
在Person.h中 创建Person类中的几个实例变量, 声明setter和getter方法 "上代码"敢问代码是谁!
#import <Foundation/Foundation.h>
/*
实例变量可见度
1.@Public 公共可见度: 在类的内部和外部都可以进行访问,因为外部也可以访问,所以他破坏了类的封装特性.
2.@Private私有可见度: 只有当前类才可以访问,子类也无法访问,由于子类也无法访问,所以破坏了类的继承特性.
3.@Protected受保护可见度:当前类以及子类可以访问.(是默认的)也是最适合用的!
*/
@interface Person : NSObject
{
//定义Person类的实例变量
NSString *_name;//名字 属于字符串,所以用NSString 并且要带*
NSString *_sex; //性别 属于字符串,所以用NSString 并且要带*
NSInteger _age; //年龄 属于常量,所以用int类型,NSInteger是OC中表示常量的,不需要带*
CGFloat _weight;//体重 数据常量,CGFload相当于fload,所以不需要带*
}
//初始化方法
- (id)init;
//自定义初始化方法 形式: initWith + 接口部分的各个参数 例如:
- (id)initWtihName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age //参数类型不带*
weight:(CGFloat)weight; //参数类型不带*
//方法声明 打招呼
- (void)sayHi;
//对各个实例变量"统一"设置setter方法
//setter方法的格式 以set卡头 + 实例变量(去掉下划线,并且首字母大写):(参数类型NSString)参数名
- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight;
//对各个实例变量"分开"设置setter方法
- (void)setName:(NSString *)name;
- (void)setSex:(NSString *)sex;
- (void)setAge:(NSInteger)age;
//(返回值)set(参数名)(参数类型)(参数名)
- (void)setWeight:(CGFloat)weight;
//对各个设置好setter方法的实例变量, 分别设置getter方法
//getter格式:返回值为对应实例变量的类型,方法名为实例变量名去掉下划线
- (NSString *)name;
- (NSString *)sex;
- (NSInteger)age;
- (CGFloat)weight;
/* 最好把setter和getter方法写在一起例如:
- (void)setName:(NSString *)name;
- (NSString *)name;
*/
@end
=================================================================
在Person.m文件中, 实现init方法 实现setter和getter的方法 "上代码" 敢问代码是谁!
#import "Person.h" //此处不要误解是在Person.h中, 这里就是Person.m文件
@implementation Person
//初始化 对每个实例进行初始的赋值
- (id)init
{
_name = @"Jack";
_sex = @"male";
_age = 30; //常量类型,所以不要用@"30"
_weight = 160; //与age同理
return self;
}
//调用父类系统初始化的过程
- (id)initWtihName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight
{
self = [super init];//调用父类的方法
if (self) { //如果调用了父类的方法
_name = name; // _name是最上面init中的参数, name是initWithName后面的name
_sex = sex; // 当在main函数中name传入新值的时候,_name就等于新的名字.
_age = age;
_weight = weight;
}
return self;
}
//========setter(赋值)和getter(取值)方法的实现========//
//方法的实现
- (void)sayHi
{
NSLog(@"人都拥有打招呼的功能");//此处是对Person.h中声明的方法进行具体的实现!
}
//对各个实例变量"统一"实现setter(赋值)方法
//对各个实例变量"统一"实现getter(取值)方法
- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight
{
_name = name;
_sex = sex;
_age = age;
_weight = weight;
}
//对各个实例变量"分别"实现setter(赋值)方法
//注:每个方法的实现都是与Person.h中声明的都是一一对应的亲!
- (void)setName:(NSString *)name
{
_name = name;//将传入进来的name的值赋给_name;可能有点绕,要仔细想想.
}
- (void)setSex:(NSString *)sex
{
_sex = sex;
}
-(void)setAge:(NSInteger)age
{
_age = age;
}
- (void)setWeight:(CGFloat)weight
{
_weight = weight;
}
//对各个实例变量"分别"实现getter(取值)方法
//注:每个方法的实现都是与Person.h中声明的都是一一对应的亲!
- (NSString *)name //name的getter方法实现
{
return _name;
//return回去的是最上面init中的_name 下面的方法同理.
}
- (NSString *)sex //sex的getter方法实现
{
return _sex;
}
- (NSInteger)age //age的getter方法实现
{
return _age;
}
-(CGFloat)weight //weight的getter方法实现
{
return _weight;
}
//建议书写格式: 可以采用setter和getter方法写在一块的方式
/*
- (void)setName:(NSString *)name
{
_name = name;
}
-(NSString *)name
{
return self;
}
*/
@end
=================================================================
在Main函数中,导入Person.h文件, 创建Person类的对象,并且对对象进行赋值,取值 "上代码" 敢问代码是谁!
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
//创建一个Person的对象
Person *per = [[Person alloc] init];
//给Person的对象per赋值名字
[per setName:@"Henry"];
//给对象per赋值性别
[per setSex:@"male"];
//给对象per赋值年龄
[per setAge:30];
//给对象per赋值体重
[per setWeight:160];
//NSLog(@"per的名字是:%@",per); 此时打印per只是打印一个地址, 要给per对象一个指定的打印的实例.
//如果此时,打印的结果是: per的名字是:<Person: 0x100201e10>
NSLog(@"per的名字:%@ 性别:%@ 年龄:%ld 体重:%.2f",[per name],[per sex],[per age],[per weight]);
//打印结果:per的名字:Henry 性别:male 年龄:30 体重:160.00
//为对象per重新赋值
[per setName:@"Lily" sex:@"female" age:22 weight:96];
NSLog(@"per的名字:%@ 性别:%@ 年龄:%ld 体重:%.2f",[per name],[per sex],[per age],[per weight]);
//打印结果:per的名字:Lily 性别:female 年龄:22 体重:96.00
//per来调用Person类的方法
[per sayHi];
return 0;
}
好了,OC第二个课程学完了, 我也不知道是否会有人看我写的博客, 如果有看到这些的朋友,能够给与一些建议, 因为我也是初学者, 大家互相激励.
今天时间还算早,我在去学习下一章的内容
标签:
原文地址:http://www.cnblogs.com/why2wm/p/4411170.html