1. self 是一個隱式變量静檬,其類型為id帘营,關(guān)于id的定義和Class的定義可以在objc.h頭文件種找到,查找objc.h的方法就是找到一個foundation或者uikit類庫下的一個文件一直點擊往里看。
struct?objc_class?{??
struct?objc_class?*?isa;??
struct?objc_class?*?super_class;??/*父類*/??
const?charchar?*name;?????????????????/*類名字*/??
long?version;???????????????????/*版本信息*/??
long?info;????????????????????????/*類信息*/??
long?instance_size;???????????????/*實例大小*/
struct?objc_ivar_list?*ivars;?????/*實例參數(shù)鏈表*/?
struct?objc_method_list?**methodLists;??/*方法鏈表*/
struct?objc_cache?*cache;???????????????/*方法緩存*/??
struct?objc_protocol_list?*protocols;???/*協(xié)議鏈表*/?
};?
由上代碼可知:
1)id 是一個 objc_object 結(jié)構(gòu)類型的指針翩活,而objc_object結(jié)構(gòu)就表示是一個對象阱洪。所以,id 聲明的變量則是一個指向?qū)ο蟮闹羔槨?/p>
2) 我們所說的“對象”菠镇,就是指這樣的一個結(jié)構(gòu)體:objc_object 冗荸,它的成員只有一個指向object_class結(jié)構(gòu)體的指針"isa"。
總結(jié):
a)?self 是指向于一個objc_object結(jié)構(gòu)體的首地址利耍。
b) [self class] ?返回的是objc_class結(jié)構(gòu)體的首地址蚌本,也就是self->isa的值