• Objective


    在前面, 我们学习了OC的很多语法, 还有书写规范, 在这过程中肯定会有人有很多疑问, 今天我们就来讲讲其中的一个东西, 类的本质, 类的本质其实也是一个对象, 为什么这么说呢, 下面让我们来一起探讨一下:



    例子:

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @property int age;
    @end
    
    @implementation Person
    @end
    
    int main()
    {
        Person *p = [[Person alloc]init];
        return 0;
    }


    其实在这个例子中, 其实p这个对象, 里面是有两个成员变量, 一个是我们看到的age, 还有一个是isa的一个指针指向Person这个类, 下面让我们来看看示意图:


    这就是我们一直以来所创建对象的深层结构, 当然Person继承于NSObject, 所以它也有一个isa指针指向NSObject, 说到这里, 我们知道p这个对象的类型是Person类型, 那么Person是属于什么类型呢? 其实Person是属于Class类型, 也可以说是Class类型的对象, 简称类对象.



    示意图:



    那么我们怎么获取内存中的类对象呢? 下面让我们来看看:

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @property int age;
    @end
    
    @implementation Person
    @end
    
    int main()
    {
        Person *p = [[Person alloc]init];
    
        Class c = [p class];
    
        Class c1 = [Person class];
    
        NSLog(@"c = %p, c1 = %p", c, c1);
    
        return 0;
    }

    结果:

    2015-01-24 13:33:11.379 07-类的本质[10550:1139795] c = 0x1000011c0, c1 = 0x1000011c0
    

    这个结果证明了它们所指的对象在内存中都是同一个, 无论你创建再怎么多的对象, 它在内存也就只有一份, 只有一块存储空间.



    有人或许会问, 如果我在Person里写一个类方法, 那么用Class是否也可以调用, 答案当然是可以的, 多说无益, 下面让我们来看看实例:

    </pre><p></p><p><pre name="code" class="objc">#import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @property int age;
    
    + (void)test;
    @end
    
    @implementation Person
    + (void)test
    {
    	NSLog(@"调用了test方法");
    }
    @end
    
    int main()
    {
        Person *p = [[Person alloc]init];
        [Person test];
    
        Class c = [p class];
        [c test];
    
        Class c1 = [Person class];
        [c1 test];
    
        return 0;
    }


    
    结果:
    

    2015-01-24 13:49:11.722 07-类的本质[10612:1146229] 调用了test方法
    2015-01-24 13:49:11.723 07-类的本质[10612:1146229] 调用了test方法
    2015-01-24 13:49:11.723 07-类的本质[10612:1146229] 调用了test方法
    



    以后有人说类对象, 其实就是类, 说类, 其实就是指类对象.





    好了, 这次我们就讲到之类, 下次我们继续~~~

  • 相关阅读:
    Tensorflow io demo (待)
    tf.Dataset
    tf.estimator
    并发队列
    Callable的Future模式
    hadoop之HDFS介绍
    线程池
    并发工具类
    并发编程
    初学hadoop之hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282835.html
Copyright © 2020-2023  润新知