------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.设计一个类,让狗先叫再跑
#inport<Foundation/Foundation.h>
//声明
@interface Dog :NSObject
-(void)bark;
-(void)run;
@end
@implementation Dog
//方法的实现
-(void)bark
{
NSLog(@"汪汪汪");
}
-(void)run
{
NSLog(@"汪汪汪");
NSLog(@"跑跑跑");
}
@end
int main()
{
Dog *d = [Dog new];
[p run];
return 0;
}
输出结果:汪汪汪
跑跑跑
这样在-(void)run的实现中有语句重复,所以不好
-(void)run的实现可改为:
{
[self bark];
NSLog(@"跑跑跑");
}
这样输出的结果为:汪汪汪
跑跑跑
2.self使用注意
#inport<Foundation/Foundation.h>
//声明
@interface Person :NSObject
+(void)test;
-(void)test;
-(void)haha1;
+(void)haha2;
int haha3();
@end
@implementation Person
//方法的实现
-(void)test
{
NSLog(@"调用了-test方法");
[self test];
}
+(void)test
{
NSLog(@"调用了+test方法");
[self test];
}
@end
1)
int main()
{
Person *p = [Person new];
[p test];
return 0;
}
输出结果:调用了-test方法
调用了-test方法
调用了-test方法
.............
(死循环)
2)
int main()
{
[Person test];
return 0;
}
输出结果:调用了+test方法
调用了+test方法
调用了+test方法
.............
(死循环)
3)把haha的实现写为
-(void)haha1
{
NSLog(@"haha1");
}
+(void)haha2
{
[self haha1];
[self haha3];
}
这样写+(void)haha2不对:
[self haha1];先来到类方法,因为是+(void)haha2调用的,所以这里的self代表类,所以会从中
找+haha1,找不到,所以运行时会报错。
[self haha3];同理,haha3是函数,不依赖于对象存在,所以调用函数时只用写:hah3();就可以
中括号[]只是调用对象方法和类方法时才用。
3.self的用途:
1>概念:指向当前对象(方法调用者)
2>在对象方法中,可利用“self->成员变量名”访问当前对象内部的成员变量
3>[self 方法名];可调用其他对象方法\类方法
4>self出现在对象方法中,self就代表对象
5>self出现在类方法中,self就代表类