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;
}