您的位置:首页 > 其它

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

2016-03-18 17:37 204 查看

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

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也是一种指针,是一种指向类对象的指针。(严格的来说是一种指向类对象的指针类型。它所定义的指针变量指向类对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: