第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Runtime系列(類與元類)

標簽:
iOS

这篇文章继 Runtime系列(引文)之后,仍然是一篇引导文,主讲类与元类。如果你读过 Runtime系列(引文),可能会在其中发现一个词:类对象。那么什么是类对象?

先看一段代码

NSArray *arr = [NSArray array];

他是怎么运行的?

上篇文章中提到,[receiver message]底层会调用id objc_msgSend(id self, SEL op, ...)。再来回顾一下id是什么

struct objc_object {
    Class isa  OBJC_ISA_AVAILABILITY;
};

typedef struct objc_object *id;

id指向一个对象,可以猜测[NSArray array]中的NSArray也是一个对象。可NSArray怎么会是对象?这就要引出本文的另一个主角元类了。

元类

其实NSArray和arr一样,也是对象,叫做类对象。

Class.png

可以看到,Class中也有个isa指针,他的指向就是自身的元类。

元类是类对象的类,类对象是元类的实例。

基于这种设计模式,不难发现:

1.我们以前调用 "+" 开头的类方法实际是在调用元类的对象方法

2.由于每个类有且只有一个,所以每个类对象都是其对应元类的单例

那么,元类是对象吗?

答案是肯定的,元类是对象。

如果元类也是对象,元类的类又是什么?

元类的类

再来看一张网上的示意图

示意图.png

图解

我们接触到的大部分OC对象都继承自NSObject,这里直接以NSObject为例。

1.每个实例对象的类都是类对象,每个类对象的类都是元类对象,每个元类对象的类都是根元类(root meta class的isa指向自身)

2.类对象的父类最终继承自根类对象NSObject,NSObject的父类为nil

3.元类对象(包括根元类)的父类最终继承自根类对象NSObject

可见,类与元类是一个闭环。

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
移動開發(fā)工程師
手記
粉絲
7
獲贊與收藏
67

關(guān)注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消