------<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],指向调用该方法中的对象。