-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-----
一、封装
1>set方法和get方法
使用场合:@public的成员可以随意赋值,应该使用set方法和get方法来管理成员变量的访问(例如:一个人的年龄不能为0或负数)。
2>set方法
作用:
用来设置成员变量,可以在方法里面过滤一些不合理的值。
命名规范:
set方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写。
形参名称不要跟成员变量同名。
3>get方法
作用:
返回对象内部成员变量值。
命名规范:
get方法的名称同该成员变量同名。
4>关于成员变量的命名规范
1.成员变量命名都以下划线_开头。
2.可以跟get方法的名称区分开。
3.可以跟其它局部变量区分开,一看到下划线开头的变量,肯定是成员变量。
5>示例代码:car.m文件
#import <Foundation/Foundation.h>
// 声明
@interface Car : NSObject
{
int _speed; //时速
}
/*set方法*/
- (void) setSpeed:(int)speed;
/*get方法*/
- (int) speed;
@end
@implementation Car
// set方法的实现
- (void) setSpeed:(int)speed
{
//判断值是否符合要求
if (speed<=0)
{
speed= 100;
}
_speed = speed;
}
// get方法的实现
- (int) speed
{
return _speed;
}
@end
6>封装的好处
1.过滤不合理的值。
2.屏蔽内部赋值过程。
3.让外界不必关心内部操作。
二、类方法
1>基本概念
直接可以用类名来执行的方法(类本身会在内存占据存储空间,里面有类、对象方法列表)。
2>类方法和对象方法对比
1.对象方法
以减号开头。
只能用实例对象调用,没有实例对象,方法不能执行。
对象方法能访问成员变量。
2.类方法
以加号开头。
只能用类名调用,实例对象不能调用
类方法不能操作成员变量。
类方法执行效率要比对象方法高。
3.类方法的使用场合
当不需要成员变量的时候,尽量使用类方法。
4.其它
类方法和对象方法可以同名。
3>示例代码:Calculator.m
/*
计算器类:求和、求平均值
*/
#import <Foundation/Foundation.h>
@interface Calculator:NSObject
{
//声明方法求和
+ (int)sumOfNumber:(int)number AndNumber2:(int)number2;
//声明方法求平均
+ (double)avgOfNumber:(double)number AndNumber2:(int)number2;
}
@implement Calculator
{
//求和方法实现
+ (int)sumOfNumber:(int)number AndNumber2:(int)number2
{
return number+number2;
}
//方式求平均
+ (double)avgOfNumber:(double)number AndNumber2:(int)number2
{
return (number+number2)/2;
}
}
int main()
{
int sum= [Calculator sumOfNumber:100 AndNumber2:200];
NSLog(@"求和后值为:%d",sum);
double avg= [Calculator avgOfNumber:100 AndNumber2:200];
NSLog(@"求和后值为:%f",avg);
return 0;
}
三、self关键字
1>成员变量和局部变量访问同名
1.当成员变量和局部变量同名时,采取就近原则,访问的是局部变量。
2.用self访问成员变量,区分同名的局部变量。
2>使用细节
1.出现的地方
出现在OC方法中(对象方法、类方法),函数不能使用。
2.作用
使用"self->成员变量名" 访问当前方法调用成员变量。
使用"[self 方法名]" 调用方法(对象方法、类方法)。
3.常见错误
使用self调用函数。
类方法中使用self调用对象方法,对象方法使用self调用类方法。
self死循环。
3>示例代码:
/*
计算器类:求和、求平均值
*/
#import <Foundation/Foundation.h>
@interface Calculator:NSObject
{
int _number;
int _number2;
}
//_number
- (void)setNumber:(int)number;
- (int)number;
//_number2
- (void)setNumber2:(int)number;
- (int)number2;
//声明方法求和
- (int)sum;
//声明方法求平均
- (int)avg;
@end
@implementation Calculator
//_number
- (void)setNumber:(int)number
{
self->_number=number;
}
- (int)number
{
return self->_number;
}
//_number2
- (void)setNumber2:(int)number
{
self->_number2=number;
}
- (int)number2
{
return self->_number2;
}
//求和方法实现
- (int)sum
{
return (self->_number)+(self->_number2);
}
//方式求平均
- (int)avg
{
//return ((self->_number)+(self->_number2))/2;
return [self sum]/2;
}
@end
int main()
{
Calculator *c= [Calculator new];
[c setNumber:100];
[c setNumber2:100];
int sum=[c sum];
NSLog(@"sum:%d",sum);
int avg=[c avg];
NSLog(@"avg:%d",avg);
return 0;
}