首页 > 其他 > 详细

Objective-C对象模型

时间:2016-11-17 13:53:08      阅读:147      评论:0      收藏:0      [点我收藏+]

Objective-C是一门面向对象的编程语言,每一个对象都是一个类的实例。XCode中打开objc.h可以看到如下定义:

/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;

/// Represents an instance of a class.
struct objc_object {
    Class isa  OBJC_ISA_AVAILABILITY;
};

/// A pointer to an instance of a class.
typedef struct objc_object *id;

每个对象包含一个isa指针,指向该对象的类。XCode中打开runtime.h可以看到类的定义:

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指针。可以看出,类也是一个对象。那么类的类是什么呢?在OC中,类的类称为元类(metaclass)。

元类也是一个对象,也有isa指针。元类的isa指针指向元类的类,根元类(root metaclass)。

根元类也有isa指针,只是根元类的isa指针指向自己。上图说话。

技术分享

这里,可以把Root class看成NSObject。

 

Objective-C对象模型

原文:http://www.cnblogs.com/gattaca/p/6073115.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!