OC类和对象-self关键字

Object-C技术学习,更多资源请访问 https://www.itkc8.com

//  main.m

//  OC面向对象

//

//  Created by Goddog on 15/1/2.

//  Copyright (c) 2015年 Goddog. All rights reserved.

//

/*

    1.self关键字总是指向调用该对象的方法。

    2.self最大的作用是让类中的一个方法访问该类的另一个方法或成员变量。

 */

#import <Foundation/Foundation.h>
#import "MyClass.h"      //导入类的接口部分即可

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        /*
         self总是代表当前类的对象,当self出现在某个方法体中,它代表的对象是不确定的,但是它的类型是确定的
         它所代表的对象只能是当前类的实例,当这个方法被调用时,它所代表的对象才被确定下来,谁在调用该方法,
         self就是谁。但是self不能出现在类方法中,应为类方法的调用者是类的本身。
         */
        //创建MyClass方法
        MyClass* class = [[MyClass alloc] init];
        
        //调用对象的sayEnglish方法
        [class sayEnglish];
        
        //-------------------------------
        /*
            当局部变量和成员变量重名的时候,局部变量会隐藏成员变量,为了在方法中抢行引用成员变量,可以用self区分。
         */
        MyClass* mc = [[MyClass alloc] init];
        [mc setName:@"HUXU" andAge:25];
        [mc info];
        
        //-------------------------------
        /*
            当self作为对象的默认引用使用时,程序可以像访问普通指针变量一样访问这个self引用,
            甚至可以把self当成普通方法的返回值
         */
        //连续调用同一方法
        MyClass* mc1 = [[MyClass alloc] init];
        [[[mc1 grow] grow] grow];
        NSLog(@"该成员变量值时:%d",mc1->_time);//_time初始化为0,连续调用3次累计为3。
    }
    return 0;
}

 

//
//  MyClass.h
//  OC面向对象
//
//  Created by Goddog on 15/1/2.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyClass : NSObject

//成员变量
{
    NSString* _name;
    int _age;
    
    @public
    int _time;
}

//定义一个say方法
-(void) say;

//定义一个sayEnglish方法
-(void) sayEnglish;

//定义一个setName:andAge:方法
-(void) setName: (NSString*) _name andAge: (int) _age;

//定义一个info方法
-(void) info;

//定义一个方法
-(MyClass*) grow;

@end

 

//
//  MyClass.m
//  OC面向对象
//
//  Created by Goddog on 15/1/2.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "MyClass.h"

@implementation MyClass

//实现say方法
-(void) say
{
    NSLog(@"说");
}

//实现sayEnglish方法
-(void) sayEnglish
{
    //这样也可以调用say方法
//    MyClass* myClass = [[MyClass alloc] init];
//    [myClass say];
    [self say];   //谁在调用这个方法,self就是谁
    NSLog(@"这样也可以执行sayEnglish方法");
}

//实现setName:andAge:方法
-(void) setName:(NSString *)_name andAge:(int)_age
{
    //当局部变量隐藏成员变量时候,可以用self代表调用该方法,这样就可以调用该方法的成员变量赋值
    self->_age=_age;
    self->_name=_name;
}

//实现info方法
-(void) info{
    NSLog(@"我的姓名%@,芳龄%d",_name,_age);
}

//实现返回self的方法
-(MyClass*) grow
{
    _time++;
    return self;
}

@end


Object-C技术学习,更多资源请访问 https://www.itkc8.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值