iOS OC类结构class分析

一,我们平时写的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);
    }
    .......
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容