iOS OC类结构class分析

2021-03-02  本文已影响0人  kaijiemu

一,我们平时写的oc文件可以通过clang编译生成底层cpp文件,可以清楚看到类在底层的结构

iPhoneSimulator.sdk根据你xcode的版本修改

clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxx.m

二,我们知道类在底层就是结构体objc_class,通过查看objc源码,来看下类的结构

1,继承objc_object,objc_object结构体里有ISA指针,所有所有类都有ISA指针
2,superclass ,父类指针
3,cache,缓存
4,bits,类方法,协议,属性等
5,data(),通过该方法获取bits的具体内容

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);
    }
    .......
}
上一篇 下一篇

猜你喜欢

热点阅读