在Object中,关键字self与c++中this类似,但又有所不同。self在实例方法中表示当前对象的指针,通过self可以调用自己的属性和方法。但是self在类方法中表示该类的指针。
通过代码分析self在实力和类方法中得不同。代码入下所示:
#import <Foundation/Foundation.h>
@interface RichMan : NSObject
@property (nonatomic,retain) NSString *name;//姓名
@property (nonatomic,assign) int age;//年龄
@property (nonatomic,assign) BOOL gender;//性别
- (void) sayHello;//打招呼
- (void) charge;//刷卡
- (void) test1;//测试self的实例方法
+ (void) test2;//测试self的类方法
@end
#import "RichMan.h"
@implementation RichMan
@synthesize name,age,gender;
//打招呼
- (void) sayHello{
NSLog(@"大家好,我叫:%@",name);
}
//刷卡
- (void) charge{
NSLog(@"嘻唰唰!嘻唰唰!");
}
//测试self的实例方法
- (void) test1{
NSLog(@"大家好,我叫:%@",self.name);
[self test3];
}
//测试self的类方法
+ (void) test2{
NSLog(@"%@",self);
// [self test3];
}
- (void) test3{
NSLog(@"我是test3方法");
}
@end
#import <Foundation/Foundation.h>
//#import "Rich2nd.h"
#import "RichMan.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// Rich2nd *richSecond = [[Rich2nd new] autorelease];
// [richSecond charge];
RichMan *richMan = [[RichMan new] autorelease];
[richMan test1];
[RichMan test2];
}
return 0;
}
2013-10-13 15:39:27.677 继承[2076:303] 大家好,我叫:(null)
2013-10-13 15:39:27.680 继承[2076:303] 我是test3方法
2013-10-13 15:39:27.680 继承[2076:303] RichMan
在这个RichMan中增加了三个方法 test1、test2、test3;其中test3方法没有在@interface中声明,但是在@implementation中又不会报错,我们把它看成私有方法,仅在类的实现中使用。
test1 是实例方法,实现类中第16、17行代码,通过self调用了自己的属性和方法。
test2 是类方法,self在类方法中表示该类的指针,第22行代码注释掉了,因为test3并不是类方法,所以在类方法中得self无法调用它。