您的位置:首页 > 其它

可见度和方法

2015-07-18 11:51 274 查看

实例变量可见度

可见度:

可见度特点
public(公有的)在类的内外部都可以操作
protected(系统默认,受保护的)只能在类和子类中操作
private(私有的)只能在该类内访问
{
@public
NSString *_perName;
NSString *_perSex;
@protected
NSInteger _perAge;
@private
NSString *_perHobby;
}


一般不使用@public,原因如下

容易暴漏类内部的细节

不符合”封装的特性”

方法

方法分类

OC中的方法可以分为两种

类方法 如:+(id)alloc

实例方法 如:-(void)sayHi

注意:类方法中不能使用实例变量,且只能类使用. 实例方法只能对象使用

- (void) setStuName:(NSString *) stuName


其中

“-“为方法类型表示符,类方法为”+”

(void)为返回类型

setStuName为参数形容词

(NSString *)为参数的类型

stuName 为参数名

方法名就是方法语句去掉类型表示,返回类型,参数类型,参数名以及空格所剩的部分

即为
setStuName:


注意:类中不能出现同名方法.”:”为标示参数,不可以省略,有冒号必须有参数

setter,getter

对实例变量赋值或者取值的时候使用

赋值方法:setter,为设置器

读取实例变量值的方法:getter,为访问器

赋值语句:当对多个语句进行操作的时候,称为赋值语句

Person.h

// 设置器
- (void) setPerName:(NSString *)perName
{
_perName = perName;
}
// 访问器
- (NSString *)perName
{
return _perName;
}
// 赋值语句
- (void) setPerName:(NSString *)perName
setPerSex:(NSString *)perHobby;


Person.m

// 设置器
- (void) setPerName:(NSString *)perName
{
_perName = perName;
}
// 访问器
- (NSString *)perName
{
return _perName;
}
// 赋值语句
- (void) setPerName:(NSString *)perName
setPerSex:(NSString *)perHobby;
{
_perName = perName;
_perHobby= perHobby;
}


注意

如果写声明但是没实现,会在.m文件中出现警告,告诉我们应该把方法补全

无论setter 还是 getter 的内部操作的是实例变量

每一个实例变量都需要一对的setter和getter方法

方法使用

当我们想调用方法时,使用

[person sayHi]


即为消息机制,对应的就是

[消息的接收者 具体要做的事]

自定义初始化方法

-(id)init 一般的初始化方法只能给变量设置默认值,不灵活

-(id)initWithName: 自定义初始化方法,可以根据需求来定义

.h

- (id) initWithPerName:(NSString *)perName
perSex:(NSString *)perSex;


.m

- (id) initWithPerName:(NSString *)perName
perSex:(NSString *)perSex;
{
_perName = perName;
_perSex = perSex;
return self;
}


#import

作用:导入头文件的内容到当前的类

其中

#import “xxx.h” 导入自定义的类

#import <>导入类库中的头文件

注意:用import引入头文件容易引起交叉导入,导致错误

所以这时候应该使用@class ,用@class可以防止交叉引入头文件的问题,系统会把A当做是一个已经存在的类来使用,不会把A.h的内容进行拷贝,就是用了一下A的名,其他不做任何的检测

代码练习

main.m

// 创建一个对象
//    Student *stu = [[Student alloc] init];
//    [stu sayHi];
//    Student *stu = [[Student alloc] init];
//    [stu setStuName:@"商帅" setStuAge:24 setStuHobby:@"UNIQLO" setStuScore:80  setStuSex:@"女" ];
//    [stu sayHi];
//
//    [stu setStuName:@"abc"];

//    NSLog(@"%@",[stu stuName]);

//    // 车
//    AudiCar *car = [[AudiCar alloc] init];
//    // 赋值语句
//    [car setCarBrand:@"A8" setCarPrice:@"100w" setCarSpeed:300];
//    [car sayHi];
//    // setter getter
//    [car setCarBrand:@"A6"];
//    [car setCarPrice:@"60w"];
//    [car setCarSpeed:200];
//    NSLog(@"型号%@",[car carBrand]);
//    [car sayHi];

//    Student *stu = [[Student alloc] initWithStuName:@"商帅" stuAge:24 stuScore:80 stuSex:@"男" stuHobby:@"比美"];
//    [stu sayHi];
//
//    AudiCar *car = [[AudiCar alloc] initWithCarBrand:@"A4" carPrice:@"30w" carSpeed:200];
//    [car sayHi];


AudiCar.h

@interface AudiCar : NSObject

// 三个成员变量,默认可见度
{
NSString *_carBrand;
NSString *_carPrice;
CGFloat _carSpeed;
}
- (void) sayHi;
// 对三个成员变量进行统一赋值的赋值语句
- (void) setCarBrand:(NSString *)carBrand
setCarPrice:(NSString *)carPrice
setCarSpeed:(CGFloat)carSpeed;
// 三个成员变量的设置器
- (void) setCarBrand:(NSString *)carBrand;
- (void) setCarPrice:(NSString *)carPrice;
- (void) setCarSpeed:(NSInteger)carSpeed;
// 访问器
- (NSString *) carBrand;
- (NSString *) carPrice;
- (NSInteger) carSpeed;

// 自定义初始化方法
- (id) initWithCarBrand:(NSString *)carBrand
carPrice:(NSString *)carPrice
carSpeed:(CGFloat)carSpeed;
@end


AudiCar.m

@implementation AudiCar
- (void) sayHi
{
NSLog(@"型号%@,价格%@,速度%g",_carBrand,_carPrice,_carSpeed);
}

// 对三个成员变量进行统一赋值的赋值语句
- (void) setCarBrand:(NSString *)carBrand
setCarPrice:(NSString *)carPrice
setCarSpeed:(CGFloat)carSpeed;
{
_carBrand = carBrand;
_carPrice = carPrice;
_carSpeed = carSpeed;
}
// 三个成员变量的设置器
- (void) setCarBrand:(NSString *)carBrand
{
_carBrand = carBrand;
}
- (void) setCarPrice:(NSString *)carPrice
{
_carPrice = carPrice;
}
- (void) setCarSpeed:(NSInteger)carSpeed
{
_carSpeed = carSpeed;
}
// 访问器
- (NSString *) carBrand
{
return _carBrand;
}
- (NSString *) carPrice
{
return _carPrice;
}
- (NSInteger) carSpeed
{
return _carSpeed;
}

- (id) init
{
_carSpeed = 200;
_carPrice = @"100w";
_carBrand = @"R8";
return self;
}

- (id) initWithCarBrand:(NSString *)carBrand
carPrice:(NSString *)carPrice
carSpeed:(CGFloat)carSpeed;
{
_carBrand = carBrand;
_carSpeed = carSpeed;
_carPrice = carPrice;
return self;
}

@end


Student.h

@interface Student : NSObject
{
@public
NSString *_stuName;
NSString *_stuSex;
@private
NSString *_stuHobby;
NSInteger _stuAge;
@protected
CGFloat _stuScore;
}

- (void) sayHi;
- (void) eat;
- (void) play;

// 对所有成员变量的赋值语句
- (void) setStuName:(NSString *) stuname
setStuAge:(NSInteger)stuAge
setStuHobby:(NSString *) stuHobby
setStuScore:(CGFloat) stuScore
setStuSex:(NSString *) stuSex;

// 设置器
- (void) setStuName:(NSString *)stuName;
- (void) setStuAge:(NSInteger)stuAge;
- (void) setStuSex:(NSString *)stuSex;
- (void) setStuScore:(CGFloat)stuScore;
- (void) setStuHobby:(NSString *)stuHobby;

// 访问器
-(NSString *)stuName;
-(NSInteger)stuAge;
-(NSString *)stuSex;
-(CGFloat)stuScore;
-(NSString *)stuHobby;

// 自定义的初始化方法
- (id) initWithStuName:(NSString *)stuName
stuAge:(NSInteger)stuAge
stuScore:(CGFloat)stuScore
stuSex:(NSString *)stuSex
stuHobby:(NSString *)stuHobby;
@end


Student.m

@implementation Student
- (void) sayHi
{
NSLog(@"姓名:%@,爱好:%@,性别:%@,岁数:%ld,成绩:%g",_stuName,_stuHobby,_stuSex,_stuAge,_stuScore);
}
- (void) eat
{
NSLog(@"吃饭");
}
- (void) play
{
NSLog(@"要玩");
}

- (void) setStuName:(NSString *) stuname
setStuAge:(NSInteger)stuAge
setStuHobby:(NSString *) stuHobby
setStuScore:(CGFloat) stuScore
setStuSex:(NSString *) stuSex;
{
_stuName = stuname;
_stuAge = stuAge;
_stuHobby = stuHobby;
_stuScore = stuScore;
_stuSex = stuSex;
}

// 设置器
- (void) setStuName:(NSString *)stuName
{
_stuName = stuName;
}
- (void) setStuAge:(NSInteger)stuAge
{
_stuAge = stuAge;
}
- (void) setStuSex:(NSString *)stuSex
{
_stuSex = stuSex;
}
- (void) setStuScore:(CGFloat)stuScore
{
_stuScore = stuScore;
}
- (void) setStuHobby:(NSString *)stuHobby
{
_stuHobby = stuHobby;
}

// 访问器
-(NSString *)stuName
{
return _stuName;
}
-(NSInteger)stuAge
{
return _stuAge;
}
-(NSString *)stuSex
{
return _stuSex;
}
-(CGFloat)stuScore
{
return _stuScore;
}
-(NSString *)stuHobby
{
return _stuHobby;
}

// 初始化
- (id) init
{
_stuName = @"张三";
_stuSex = @"男";
_stuHobby = @"女";
_stuScore = 100;
_stuAge = 20;
return self;
}
- (id) initWithStuName:(NSString *)stuName
stuAge:(NSInteger)stuAge
stuScore:(CGFloat)stuScore
stuSex:(NSString *)stuSex
stuHobby:(NSString *)stuHobby;
{
_stuName = stuName;
_stuHobby = stuHobby;
_stuAge = stuAge;
_stuScore = stuScore;
_stuSex = stuSex;
return self;
}
@end


于7月16学习,总结于7月18
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: