美文网首页
iOS底层原理探索-对象的本质

iOS底层原理探索-对象的本质

作者: 十年开发初学者 | 来源:发表于2021-04-27 15:58 被阅读0次

在探索OC对象本质之前,先了解一下clang

Clang
  • clang是⼀个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器
  • 主要用于底层编译,将oc文件转换成c++文件,方便理解底层原理
对象本质
@interface Animal : NSObject
@property (nonatomic, copy) NSString *type;
@property (nonatomic, assign) NSInteger *age;
@end

@implementation Animal
@end
  • main文件中,自定义一个类Animal,有两个属性type,name
  • 通过终端,利用clangmain.m文件,转换成main.cpp文件
clang -rewrite-objc main.m -o main.cpp
struct NSObject_IMPL {
    Class isa;
};

struct Animal_IMPL {
        
    struct NSObject_IMPL NSObject_IVARS;
    NSString *_type;
    NSInteger *_age;
};
  • 由上图可知对象的本质实际就是结构体
探索OC中的set方法
main.cpp文件中的set方法
  • 然后我们前往objc4源码中搜索objc_setProperty这个方法
    objc_setProperty方法
  • 由上图可知 objc_setProperty 实际上是一个中转站,接着reallySetProperty


    reallySetProperty

由此我们得出:
所有的set方法都会调用objc_setProperty方法——》reallySetProperty方法

相关文章

网友评论

      本文标题:iOS底层原理探索-对象的本质

      本文链接:https://www.haomeiwen.com/subject/tbzurltx.html