对Objective-C元编程的理解

Objective-C在元编程方面的能力相当强,有那么一点Ruby的风范。

1. 分类(Category)概念,与Ruby中的模块类似,但更简单和纯粹一些。

2. 类方法只能被类调用,实例方法只能被实例调用,这点与Ruby一致。

3. NSObject是一种根类(root class),不仅指它是绝多数类的祖先类,而且还是“元类”(metaclass 在Objc中,貌似无法直接触及到)的祖先类。因此,凡是NSObject的实例方法,也是其自身和子类的类方法,相当的抽象。

例如:respondsToSelect:方法定义为NSObject的一个实例方法。它既可以作为类方法被NSObject和其子类调用,也可以作为实例方法被NSObject和其子类的实例调用。唯一的区别是,作为类方法调用时,该方法告知对应的类和其父类是否具有指定的类方法,而作为实例方法调用时,告知它们是否具有指定的实例方法。

4. “元类”的含义是什么?简单的讲,就是保存有对象实例方法信息的类。普通的类就是其实例的“元类”。那类的“元类”是什么呢?在Objc中,我认为它是个概念,无法实际触及。普通类中定义的类方法,可以视为在其“元类”中的实例方法。也就是说,在类中定义的+方法,实际上就是对应“元类”中的-方法。只是因为“元类”无法触及,所以只能作为+方法在类中定义了。当调用类的类方法时,运行时(Runtime)会到其对应的“元类”中找-方法,就如同调用实例的方法时,到类中找-方法那样。

5. 当对象接收到一个消息且这个对象无对应处理方法时,运行时会调用methodSignatureForSelector:方法获取对应方法的信息。如果methodSignatureForSelector:方法返回为空,则直接异常。如果返回非空,则运行时进一步调用forwardInvocation:方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值