在OC的类中,有一个比较特殊的关键字self,跟OC中其他大多数的类关键字不一样,并不是以@开头。其他语言中也有类似的关键字,但是OC中的self用得更多,更好用。
self的本质就是一个指针,指向调用当前方法的对象,即谁调用这个方法,self就指向谁。
作用:
1. 指向了当前对象
#import <Foundation/Foundation.h>
@interface Person: NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
- (void)test;
@end
@implementation Person
- (void)setAge:(int)age
{
//_age = age;
self->_age= age;//调用当前对象成员变量
}
- (int)age
{
returnself->_age;
}
- (void)test
{
[self setAge:10];//调用当前对象方法
NSLog(@"age=%d", [self age]);
}
@end
intmain(int argc, constchar * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
[p test];
}
return0;
}
2. 指向了当前类
#import <Foundation/Foundation.h>
@interface Person: NSObject
+ (void)test1;
+ (void)test2;
@end
@implementation Person
+ (void)test1
{
NSLog(@"调用了test1方法");
}
+ (void)test2
{
[selftest1]; //调用当前类方法
NSLog(@"调用了test2方法");
}
@end
int main(int argc, constchar *argv[]) {
@autoreleasepool {
[Persontest2];
}
return0;
}
使用注意:
1. 不能使用self调用本方法,否则会导致死循环。
2. 注意调用者,如果当前调用者是对象的话,不能用self调用类方法,如果当前调用者是类的话,不能用self调用对象方法。