实例对象与类对象的简单区别

来源:互联网 发布:mac切换输入法快捷方式 编辑:程序博客网 时间:2024/05/17 01:36

实例对象与类对象简单总结

  • 1.什么是对象?(实例对象)

    苹果官方是这样定义的:

            struct objc_object {            Class isa  OBJC_ISA_AVAILABILITY;            };

    这里可以这么解释,对象是一种结构体,是一种含有isa指针的结构体。
    只要含有isa指针的结构体,就是对象。(这里最好是只含有isa指针的结构体),对象变量也可以说是一种结构体变量。

  • 2.什么是id?

    苹果官方是这样定义的:

            typedef struct objc_object *id;

    id是一种指针,是一种指向对象的指针。(严格的说是一种指针类型,是一种指向对象的指针类型,它所定义的指针指向对象类型的变量,或者说是指向对象类型的结构体变量。)

  • 3.什么是类?(类对象)

    苹果官方是这样定义的:

    struct objc_class {

    Class isa OBJC_ISA_AVAILABILITY;

    #if !OBJC2
    Class super_class OBJC2_UNAVAILABLE;

    const char *name OBJC2_UNAVAILABLE;

    long version OBJC2_UNAVAILABLE;

    long info OBJC2_UNAVAILABLE;

    long instance_size OBJC2_UNAVAILABLE;

    struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;

    struct objc_method_list **methodLists OBJC2_UNAVAILABLE;

    struct objc_cache *cache OBJC2_UNAVAILABLE;

    struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;

    #endif

    } OBJC2_UNAVAILABLE;

    类也是一种结构体,与对象结构比较,除了isa外它还有一些其他的属性。
    最明显的是:super_class指针,类对象比实例对象多了一个super_class指针。

    如果在仔细观察,我们还会发现这四行代码:

    struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;

    struct objc_method_list **methodLists OBJC2_UNAVAILABLE;

    struct objc_cache *cache OBJC2_UNAVAILABLE;

    struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;

    属性列表

    方法列表

    缓存列表(提高方法的命中率)

    协议列表

  • 4.什么是Class?

    苹果官方是这样定义的:

    typedef struct objc_class *Class;

    看来Class也是一种指针,是一种指向类对象的指针。(严格的来说是一种指向类对象的指针类型。它所定义的指针变量指向类对象)

0 0
原创粉丝点击