您的位置:首页 > 职场人生

黑马程序员——类方法与self关键字

2015-08-11 22:20 387 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1.设计一个计算器类

方法:

1>计算两个整数的平均值

2>计算两个整数的和

#inport<Foundation/Foundation.h>

//声明
@interface JiSuanQi :NSObject

-(int)sumOfNum1:(int)num1 andNum2:(int)num2;
-(int)averageOfNum1:(int)num1 andNum2:(int)num2;

@end

@implementation JiSuanQi
//方法的实现

-(int)sumOfNum1:(int)num1 andNum2:(int)num2
{
return num1 + num2;
}
-(int)averageOfNum1:(int)num1 andNum2:(int)num2
{
return (num1 + num2)/2;
}

@end

int main()
{
JiSuanQi *jsq = [JiSuanqi new];
[jsq sunWithNum1:10 andNum2:5];
return 0;
}


每次使用计算器功能都须创建一个对象。

工具类:没有任何成员变量的类。

工具类要用类方法简单。

所以把上述的两个对象方法改为类方法,即把声明和实现中的四个-改为+

main函数改为:

int main()



 [JiSuanQi sunOfNum1:10 andNum2:13];

}

也可将上述+(int)averageOfNum1:(int)num1 andNum2:(int)num2的实现完善成:

+(int)averageOfNum1:(int)num1 andNum2:(int)num2

{

 int sum = [JiSuanQi sunOfNum1:num1 andNum2:num2];

 return sum/2;

}

即在averageOfNum1:(int)num1 andNum2:类中调用sunOfNum1: andNum2:类方法。     

2.类方法使用注意

#inport<Foundation/Foundation.h>
//声明
@interface Person :NSObject
{
int age;
}
+(void)test;
-(void)test;
@end

@implementation Person
//方法的实现
-(void)test
{
NSLog(@"111-%d",age);
[Person test];
}
+(void)test
{
NSLog(@"333");
}
@end

int main()
{
Person *c = [Person new];
[p test];

}


 

输出结果:a = 111-0

       333

注意:如果在-(void)test里的实现写为[p test];那就成了死循环,所以,内部方法调用的时候一定要注意。

3.self关键字

例如:

#inport<Foundation/Foundation.h>
//声明
@interface Person :NSObject

{
int _age;
}

-(void)setAge:(int)age;
-(int)age;
-(void)test;
@end

@implementation Person
//方法的实现
-(void)setAge:(int)age
{
_age = age;
}
-(int)age
{
return age;
}
-(void)test
{
NSLog(@"Person 的年龄是%d岁",_age);
}
@end

int main()
{
Person *p = [Person new];
[p setAge:10];
[p test];
}


则输出结果:Person 的年龄是20岁

在这种情况下访问的是新定义的变量,不是成员变量,所以若在有局部变量时访问成员变量,

就要把成员变量赋给另一个变量,再调用。如:

把-(void)test的实现
97f7
改为:

{

 int age1 = _age;

 int _age = 20;

 NSLog(@"Person 的年龄是%d岁",age1);

}

则输出结果:Person 的年龄是10岁

这样访问的就是成员变量了,但是这种方法太麻烦,所以,这时就考虑用到self关键字

-(void)test的实现改为:

{

 int _age = 20;

 NSLog(@"Person 的年龄是%d岁",self->_age);

}

则输出结果:Person 的年龄是10岁

self是一个指针,指向了方向调用者,代表着当期对象,谁调用test方法,self就指向谁

所以,本题中是[p test],指向调用该方法中的对象。

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