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


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的值