黑马程序员---成长之路-----OC之基础篇self关键字

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!


OC中提供了self关键字,用于在方法定义中引用执行该方法的对象。self的用法很多,下面将一一展示。

首先是self用在对象方法中:

self在对象方法中使用其指代的是调用当前方法的对象

#import<Foundation/Foundation.h>
@interface Person : NSOcject
-(void)run;
-(void)eat:(NSString*) foodName:
@end
@implementation Person
-(void)run{
       NSLog(@"人在跑");
}
-(void)eat:(NSString*) foodName{
        NSLog(@"人在吃%@",foodName);
        //Person *p1=[Person new];
        //[p1 run];
        [self run];
}
@end
int main(int argc,const char * argv[]){
@autoreleasepool{

        Person *p=[Person new];
        [p eat:@"鸡蛋"];

}
return 0;
}

我们使用了self,那么跑和吃就是同一个人在执行。如果我们没使用self,而使用的是加了注释的那两句话,那么所的的结果就不是同一个对象在跑和走。

self在类方法中使用指代的是当前类

self用在类方法中:

#import<Foundation/Foundation.h>
@interface Person : NSOcject
+(void)run;
+(void)eat:(NSString*) foodName:
@end
@implementation Person
+(void)run{
       NSLog(@"人在跑");
}
+(void)eat:(NSString*) foodName{
        NSLog(@"人在吃%@",foodName);
        //Person *p1=[Person new];
        //[p1 run];
        [self run];
}
@end
int main(int argc,const char * argv[]){
@autoreleasepool{

       [Person eat];
        

}
return 0;
}
self修饰变量

self在对象方法中,可以利用self->属性名称的方式访问成员变量,运用在局部变量名和成员变量名一样的时候

#import <Foundation/Foundation.h> 

@interface Dog : NSObject 
{ 
//    int _speed; 
    int speed; 
} 
-(void)setSpeed:(int)speed; 
-(int)speed; 
@end 

@implementation Dog 

//set方法 
//-(void)setSpeed:(int)speed 
//{ 
//    _speed=speed; 
//} 

//get方法 
//-(int)speed 
//{ 
//    return _speed; 
//} 

//当实例变量名和set方法形参名一样的情况下 
-(void)setSpeed:(int)speed 
{ 
//    speed=speed; 

//    speed   =   speed  ; 
     
//    这就如同  int  a = 10 ; 
//             a = a ; 
     
//    所以说,在同名的情况上,上面的操作是错误的。 
     
  self->speed=speed; 
} 

-(int)speed 
{ 
    return speed; 
} 

@end 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
 
        
//        Dog *d=[Dog new]; 
//        [d setSpeed:90]; 
//        NSLog(@"speed:%d",[d speed]); 
   
        Dog *dd=[Dog new]; 
        [dd setSpeed:88]; 
        NSLog(@"speed:%d",[dd speed]); 
} 
    return 0; 
} 

用self后的结果是88,没用的结果是0.

其实self的作用就是指代自己,但是要看你用在什么地方,如果用在对象方法中就指代的是当前对象,如果用在类方法中就指代的是当前类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值