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

------<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的实现改为:
{
 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],指向调用该方法中的对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值