黑马程序员---IOS基础---OC 中对象和方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-----OC中对象和方法

一、对象的初始化

(1)如果对象的变量为基本数据类型,此时初始化值为0;

(2)如果对象的变量为OC数据类型,此时初始化值为null。

二、对象的存储细节

       假如创建一个类名为Person的对象:Person *p1 = [Person new]; p1->name = abc; p1->sex=man; [p1 run];

       那么该对象申请的空间在那个区域呢?

       p1存储的是对象首地址,它的值放在内存栈区;而对象的变量则放在地址为p1的堆区;方法则放在内存代码区。当我们建立一个对象时,我们首先要找到对象首地址,然后根据首地址进入内存堆区,找到堆区中对应的_isa指针,最后找到_isa对应的内存代码区的方法。

三、方法

(1)方法的声明:声明只能放在@interface和@end之间。

(2)方法的实现:实现职能放在@implementation和@end之间。

(3)方法的格式:对象方法使用-开头,类方法使用+开头。

(4)注意事项:1.对象方法只能由对象调用,类方法只能由类调用。2.方法的声明要写在方法的实现前面。

四、对象和方法之间的关系

(1)对象作为方法的参数

(2)对象作为方法的返回值

具体的关系请见下面程序示例:

#import <Foundation/Foundation.h>

typedef enum{white,yellow,hua,black} Color;

typedef enum{gong,mu} Sex;

#pragma 狗类的定义

@interface Dog:NSObject{

    @public

    Color _color;

    float _weight;

    Sex _sex;

    int _speed;

    }

-(void)eat:(NSString *)foodNum;

-(void)run;

-(void)print;

-(BOOL)isCompareColorWithOther:(Dog *)dog;

-(int)isCompareSpeedWithOther:(Dog *)dog;

@end

#pragma 狗类的实现

@implementation Dog

-(void)eat:(NSString *)foodNum{

    _weight =_weight+0.5;

    NSLog(@"狗吃了%@",foodNum);

}

-(void)run{

    _weight -= 0.5;

    NSLog(@"狗往前跑");

}

-(void)print{

    NSLog(@"狗当前的体重为:%.2f",_weight);

}

-(BOOL)isCompareColorWithOther:(Dog *)dog{

    if (_color == dog->_color)

    {

        return YES;

    }

    else

        return NO;

    }

-(int)isCompareSpeedWithOther:(Dog *)dog{

    return _speed - dog->_speed;//对象差作为对象方法的返回值

}

@end

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        Dog *d1 = [Dog new];//创建一个对象

        d1->_color = yellow;

        d1->_weight = 20;

        d1->_sex = gong;

        d1->_speed = 80;

        [d1 eat:(@"一个玉米")];

        [d1 run];

        [d1 print];

        Dog *d2 = [Dog new];//创建另一个对象

        d2->_color = white;

        d2->_weight = 30;

        d2->_sex = mu;

        d2->_speed = 60;

        [d2 eat:(@"一个红薯")];

        [d2 run];

        [d2 print];

        BOOL isSameColor = [d1 isCompareColorWithOther:d2];//比较狗毛颜色,d2作为方法的参数

        int isSameSpeed = [d1 isCompareSpeedWithOther:d2];//计算d1d2速度差,d2作为方法的参数

        NSLog(@"d1d2狗毛颜色相等与否=%d",isSameColor);

        NSLog(@"d1d2狗的速度差=%d",isSameSpeed);

    }

    return 0;

}

分析:上面程序很好的说明了对象和方法之间的关系。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值