cocoa self 、[self class]的關(guān)系整理

1. self 是一個(gè)隱式變量,其類(lèi)型為id,關(guān)于id的定義和Class的定義可以在objc.h頭文件種找到,查找objc.h的方法就是找到一個(gè)foundation或者uikit類(lèi)庫(kù)下的一個(gè)文件一直點(diǎn)擊往里看。


class的定義
isa和id的定義

struct?objc_class?{??

struct?objc_class?*?isa;??

struct?objc_class?*?super_class;??/*父類(lèi)*/??

const?charchar?*name;?????????????????/*類(lèi)名字*/??

long?version;???????????????????/*版本信息*/??

long?info;????????????????????????/*類(lèi)信息*/??

long?instance_size;???????????????/*實(shí)例大小*/

struct?objc_ivar_list?*ivars;?????/*實(shí)例參數(shù)鏈表*/?

struct?objc_method_list?**methodLists;??/*方法鏈表*/

struct?objc_cache?*cache;???????????????/*方法緩存*/??

struct?objc_protocol_list?*protocols;???/*協(xié)議鏈表*/?

};?


由上代碼可知:

1)id 是一個(gè) objc_object 結(jié)構(gòu)類(lèi)型的指針,而objc_object結(jié)構(gòu)就表示是一個(gè)對(duì)象。所以,id 聲明的變量則是一個(gè)指向?qū)ο蟮闹羔槨?/p>

2) 我們所說(shuō)的“對(duì)象”,就是指這樣的一個(gè)結(jié)構(gòu)體:objc_object ,它的成員只有一個(gè)指向object_class結(jié)構(gòu)體的指針"isa"。

總結(jié):

a)?self 是指向于一個(gè)objc_object結(jié)構(gòu)體的首地址。

b) [self class] ?返回的是objc_class結(jié)構(gòu)體的首地址,也就是self->isa的值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容