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

黑马程序员——self使用

2015-08-11 22:26 417 查看
------<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就代表类

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