self关键字
self关键字
self:当前类/对象的指针(指向当前对象/方法调用者)
作用1
当类里有变量名和成员变量名一样的时候,可以使用self区分
例:
我们写一个人的类,有一个年龄属性,在get方法里,我们定义一个与成员变量同名的变量,并初始化一个值为10,如果我们return _age;,则返回的是10,并不是我们的成员变量_age,但是如果我们使用self指针获取_age,那么返回的就必定我们的成员变量_age了。
#import <Foundation/Foundation.h> @interface People : NSObject { int _age; } - (void)setAge:(int)age; - (int)age; @end @implementation People - (void)setAge:(int)age { _age = age; } - (int)age { int _age = 10; return self->_age; } @end int main() { People *p = [People new]; [p setAge:26]; int age = [p age]; NSLog(@"年龄为:%d",age); return 0; }
作用2
在成员方法里,如果需要调用其他的成员方法,可以使用self
例
调用成员方法1,让成员方法1再调用成员方法2
#import <Foundation/Foundation.h> @interface People : NSObject - (void)fun1; - (void)fun2; @end @implementation People - (void)fun1 { NSLog(@"执行了第一个方法"); [self fun2]; } - (void)fun2 { NSLog(@"执行了第二个方法"); } @end int main() { People *p = [People new]; [p fun1]; return 0; }
作用3
在类方法里,如果需要调用其他的类方法,可以使用self
例
调用类方法1,让类方法1再调用类方法2
#import <Foundation/Foundation.h> @interface People : NSObject + (void)fun1; + (void)fun2; @end @implementation People + (void)fun1 { NSLog(@"执行了第一个类方法"); [self fun2]; } + (void)fun2 { NSLog(@"执行了第二个类方法"); } @end int main() { [People fun1]; return 0; }