id是一個(gè) objc_object 結(jié)構(gòu)體指針,定義是
typedef struct objc_object *id
id可以理解為指向?qū)ο蟮闹羔?。所有oc的對(duì)象 id都可以指向,編譯器不會(huì)做類型檢查,id調(diào)用任何存在的方法都不會(huì)在編譯階段報(bào)錯(cuò),當(dāng)然如果這個(gè)id指向的對(duì)象沒有這個(gè)方法,該崩潰還是會(huì)崩潰的。
NSObject *指向的必須是NSObject的子類,調(diào)用的也只能是NSObjec里面的方法否則就要做強(qiáng)制類型轉(zhuǎn)換。
不是所有的OC對(duì)象都是NSObject的子類,還有一些繼承自NSProxy。NSObject *可指向的類型是id的子集。