zoukankan      html  css  js  c++  java
  • 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];
    

    这个例子也是如此.




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

  • 相关阅读:
    科技巨头争抢的“超级账本”,到底是个什么组织?
    区块链结合教育,将给教育行业带来哪些变革?
    国家区块链战略开启,教育行业应对几何?
    区块链如何改变教育
    区块链技术在教育领域的应用模式与现实挑战
    知乎-区块链技术运用于教育有多少种可能?
    区块链+教育,让教育行业充满希望
    教育区块链应用案例【2019】
    区块链在教育行业的落地应用现状介绍
    PowerShell 搜索文件编码格式
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282863.html
Copyright © 2011-2022 走看看