self关键字
OC提供了一个self关键字,self关键字总是指向调用该方法的对象。
一:
self最大的一个作用是让类中的一个方法访问该类的另一个方法或成员变量。用法如下:
#import "FKDog.h"
@impiementation FKDog
//实现一个jump方法
- (void) jump {
NSLog (@"正在执行jump方法");
}
- (void) run {
[self jump]; //self总是代表当前类的对象。谁在调用这个方法,self就代表谁。
NSLog (@"正在执行run方法");
}
注意: self不能出现在类方法中。因为类方法的调用者是类本身,而不是对象,如果在类方法中使用了self关键字,这个self关键字就不能确定代表谁了。
二:
当局部变量和成员变量重名的情况下,局部变量会隐藏成员变量。为了在方法中强行引用成员变量,可以使用self关键字进行区分。使用如下:
#import <Foundation/Foundation.h>
@interface FKWolf: NSObject {
NSString* _name;
int _age;
}
//定义一个setName:ageAge方法
- (void) setName: (NSString*) _name andAge: (int) _age;
- //定义一个info方法
- (void) info;
@end
#import "FKWolf.h"
@implementation FKWolf
//定义一个setName:andAge方法
//此处故意让形参与成员变量重名,然后通过self强行指定访问成员变量
- (void) setName: (NSString*) _name andAge: (int) _age {
//当局部变量隐藏成员变量时,
//可用self代表调用该方法的对象,这样即可为调用该方法的成员变量赋值
self->_name = _name;
self->_age = _age;
}
//定义一个info方法
- (void) info {
NSLog (@"名字:%@, 年龄: %d", _name, _age);
}
三:
当self作为对象的默认引用使用时,程序可以像访问普通指针变量一样访问这个self引用,甚至可以把self当成普通方法的返回值。用法如下:
- (ReturnSelf*) grow {
_age++;
//返回调用该方法的对象
return self;
}
如果在某个方法中把self作为返回值,则可以多次连续调用同一个方法,从而使代码更加简洁。但是,这种把self作为返回值的方法可能造成实际意义的模糊。