初识Objecive-C 之 self关键字

在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无法调用它。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值