自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Runtime系列(類與元類)

移動(dòng)開(kāi)發(fā)
如果你讀過(guò) Runtime系列(引文),可能會(huì)在其中發(fā)現(xiàn)一個(gè)詞:類對(duì)象。那么什么是類對(duì)象?

如果你讀過(guò) Runtime系列(引文),可能會(huì)在其中發(fā)現(xiàn)一個(gè)詞:類對(duì)象。那么什么是類對(duì)象?

先看一段代碼

  1. NSArray *arr = [NSArray array]; 

他是怎么運(yùn)行的?

上篇文章中提到,[receiver message]底層會(huì)調(diào)用id objc_msgSend(id self, SEL op, ...)。再來(lái)回顧一下id是什么

  1. struct objc_object { 
  2.     Class isa  OBJC_ISA_AVAILABILITY; 
  3. }; 
  4.  
  5. typedef struct objc_object *id; 

id指向一個(gè)對(duì)象,可以猜測(cè)[NSArray array]中的NSArray也是一個(gè)對(duì)象??蒒SArray怎么會(huì)是對(duì)象?這就要引出本文的另一個(gè)主角元類了。

元類

其實(shí)NSArray和arr一樣,也是對(duì)象,叫做類對(duì)象。

Class.png

可以看到,Class中也有個(gè)isa指針,他的指向就是自身的元類。

元類是類對(duì)象的類,類對(duì)象是元類的實(shí)例。

基于這種設(shè)計(jì)模式,不難發(fā)現(xiàn):

1.我們以前調(diào)用 "+" 開(kāi)頭的類方法實(shí)際是在調(diào)用元類的對(duì)象方法
2.由于每個(gè)類有且只有一個(gè),所以每個(gè)類對(duì)象都是其對(duì)應(yīng)元類的單例

那么,元類是對(duì)象嗎?
答案是肯定的,元類是對(duì)象。
如果元類也是對(duì)象,元類的類又是什么?

元類的類

再來(lái)看一張網(wǎng)上的示意圖

示意圖.png
  • 圖解
    目前我所接觸到的oc對(duì)象都繼承自NSObject,不知道是否還有其他的Root class,這里以NSObject為例。
1.每個(gè)實(shí)例對(duì)象的類都是類對(duì)象,每個(gè)類對(duì)象的類都是元類對(duì)象,每個(gè)元類對(duì)象的類都是根元類(root meta class的isa指向自身)
2.類對(duì)象的父類最終繼承自根類對(duì)象NSObject,NSObject的父類為nil
3.元類對(duì)象(包括根元類)的父類最終繼承自根類對(duì)象NSObject

可見(jiàn),類與元類是一個(gè)閉環(huán)。

責(zé)任編輯:倪明 來(lái)源: 簡(jiǎn)書
相關(guān)推薦

2024-01-29 16:47:44

函數(shù)封裝開(kāi)發(fā)

2021-04-26 10:01:25

JavaJava基礎(chǔ)Runtime

2016-10-25 14:27:32

metaclasspython

2024-05-20 09:26:42

Python裝飾器函數(shù)

2016-09-06 19:32:11

PythonWeb

2021-03-22 10:20:04

Python元類代碼

2015-08-07 09:33:24

RuntimeModel

2010-06-09 10:04:59

UML類圖

2010-06-10 16:09:28

路由選擇協(xié)議

2009-07-22 09:31:59

Scala類類層級(jí)Java類

2024-04-02 11:34:09

成員對(duì)象封閉類C++

2015-08-06 15:20:21

runtimeIOS開(kāi)發(fā)

2010-01-15 18:35:25

C++的類

2013-05-20 17:04:09

2017-09-20 08:07:32

java加載機(jī)制

2023-12-07 09:07:58

2011-08-08 09:22:10

Python

2011-07-15 13:49:30

C++友元函數(shù)友元類

2013-05-29 10:28:05

綜合布線系統(tǒng)綜合布線技術(shù)綜合布線施工步驟

2024-03-08 08:26:25

類的加載Class文件Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)