请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于Class的两个问题

1,[per class]和[Person class]有什么区别呢?
2,[per class]和object_getClass(per)有什么区别呢?

正在回答

1回答

建议多回顾下《类的本质》那一章节,默认情况下[per class]是返回自身所对应isa,而[Person class]返回的是自身,所以二者都是返回的Person。

一个是OC里常用的方法,一个是底层RuntimeAPI。调用[per class]最终也会调用object_getClass(per),而且前者会走消息流程,后者不会。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕设计0203943 #1
    按系统常规的api,这两个方法比较好理解。
    但是,在模拟KVO实现的章节里,我们对per实例对象的isa做了改变之后,[per class]和object_getClass(per)就指向不同的对象了。我对这里还是有些许不明白
    回复 有任何疑惑可以回复我~ 2019-05-19 18:26:24
  • 逆风 回复 提问者 慕设计0203943 #2
    代码里已经把[per class]方法替换了的,你仔细分析下。
    Class KVO_class(id self,SEL _cmd)
    {
        return class_getSuperclass(object_getClass(self));  //获取isa、在获取isa的父类
    }
    回复 有任何疑惑可以回复我~ 2019-05-20 09:36:18
  • 提问者 慕设计0203943 回复 逆风 #3
    我又反复重写和学习了模拟KVO的代码,注意到更改的isaClass是原来类的子类,重写的class方法里返回的对象是通过isa指向的isaClass,来获取其父类,即原来的类。现在逻辑理顺了~非常感谢
    回复 有任何疑惑可以回复我~ 2019-05-20 11:26:44
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号