class方法和objc_getClass方法有什么区别?
源代码
+ (Class)class { return self; } - (Class)class { return object_getClass(self); }
Class object_getClass(id obj) { if (obj) return obj->getIsa(); else return Nil; }
结合对象的内存布局
分5种情况
1.当obj是实例对象时
- (Class)class { return object_getClass(self); }
class方法和objc_getClass方法一样,都是返回实例对象的isa指针。
两者相同
2.当obj是class类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,元类对象
两者不同
3.当obj为Rootclass类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,根元类对象
两者不同
4.当obj为Metaclass类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,根元类对象
两者不同
5.当obj为Rootmetaclass类对象时
class方法返回自身
objc_getClass方法返回类对象的isa指针,根元类对象
两者相同
在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2021-03-16 编译过程iOS