• Objective


    之前我们讲解了第一个OC类, 但还有一些更加细节的东西没有讲解, 下面让我们继续来看看吧~~~


    #import <Foundation/Foundation.h>
    
    @interface Preson : NSObject
    {
        @public
        int age;
        double weight;
    }
    
    - (void)walk;
    @end
    
    @implementation Preson
    
    - (void)walk
    {
        NSLog(@"有一个%d岁的人在走路, 他的体重是%.2f/kg", age, weight);
    }
    
    @end
    
    int main()
    {
        Preson *p = [Preson new];
        p->age = 20;
        p->weight = 50.5;
        [p walk];
        
        Preson *p2 = [Preson new];
        p2->age = 30;
        p2->weight = 60.0;
        [p2 walk];
        
        return 0;
    }


    这里我们详细的分析一下, 看下面的示意图:






    我们利用Proson这个类创建了两个对象, 虽然它们有相同的成员变量, 但它们却相互不受影响, 因为它们的地址是互不相同的, 而- (void)walk这个方法是它们所公用的一个方法, 谁去调用它, 那么输出的ageweight就是谁的.


    如果我们改一下:

        Preson *p = [Preson new];
        p->age = 30;
        
        Preson *p2 = [Preson new];
        p2->weight = 55.5;
        
        [p walk];
        [p2 walk];

    输出的结果是:

    2015-01-13 16:12:16.495 a.out[6631:641703] 有一个30岁的人在走路, 他的体重是0.00/kg
    2015-01-13 16:12:16.496 a.out[6631:641703] 有一个0岁的人在走路, 他的体重是55.50/kg
    


    再改一下:

        Preson *p = [Preson new];
        p->age = 30;
        
        Preson *p2 = p;
        p2->weight = 55.5;
        
        [p walk];
        [p2 walk];
    

    输出的结果是:

    2015-01-13 16:13:25.043 a.out[6637:642493] 有一个30岁的人在走路, 他的体重是55.50/kg
    2015-01-13 16:13:25.044 a.out[6637:642493] 有一个30岁的人在走路, 他的体重是55.50/kg
    



    如果基础比较好的人肯定知道这是为什么, 不知道也没事, 我们下面来看看示意图:




    看完示意图的人应该就知道了, 当p2存了p的地址时, 那么p2改了什么值, p也要跟着改, 因为它们的地址都是一样, 因为它们共用的一样的成员:

    2015-01-13 16:19:44.991 a.out[6669:646229] 0x7f93c340e000  0x7f93c340e000
    


        Preson *p = [Preson new];
        p->age = 30;
        p->weight = 60.0;
        
        Preson *p2 = [Preson new];
        p2->age = 40;
        p2->weight = 55.5;
    
        p = p2;
        
        p->age = 20;
        [p walk];
    

    这个例子也是如此.




    好啦, 这次我们就讲到这里了, 下次我们继续~~~~

  • 相关阅读:
    Idea中SpringBoot热部署搭建
    Redis 集群搭建
    centos7 vsftp搭建
    Centos 7 安装jdk
    Centos7 安装nginx
    Xshell 连接Linux
    python 的mysql 操作
    NIO/BIO
    java基础-3
    java基础-2
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282863.html
Copyright © 2020-2023  润新知