一,我們平時(shí)寫的oc文件可以通過clang編譯生成底層cpp文件,可以清楚看到類在底層的結(jié)構(gòu)
iPhoneSimulator.sdk根據(jù)你xcode的版本修改
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxx.m
二,我們知道類在底層就是結(jié)構(gòu)體objc_class,通過查看objc源碼孔厉,來看下類的結(jié)構(gòu)
1,繼承objc_object帖努,objc_object結(jié)構(gòu)體里有ISA指針撰豺,所有所有類都有ISA指針
2,superclass 拼余,父類指針
3污桦,cache,緩存
4匙监,bits凡橱,類方法,協(xié)議亭姥,屬性等
5稼钩,data(),通過該方法獲取bits的具體內(nèi)容
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() const {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
void setInfo(uint32_t set) {
ASSERT(isFuture() || isRealized());
data()->setFlags(set);
}
void clearInfo(uint32_t clear) {
ASSERT(isFuture() || isRealized());
data()->clearFlags(clear);
}
.......
}