------<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的作用就是指代自己,但是要看你用在什么地方,如果用在对象方法中就指代的是当前对象,如果用在类方法中就指代的是当前类。