摘要: Objective-C获取消息工作机制是本文要介绍的内容,看namemangling的时候,也讲到了Objective-C的name mangling,于是又重新读了一下Objective-C2.0programming Language以及Objective-C 2.0RuntimeReference里的相关内容,自己归纳一下。 MyClass.h @interfaceMyClass:NSObject { } @end MyClass.m #import< span>usr/include/objc/runtime.h>#import“MyClass.h” voidmyCl 阅读全文
posted @ 2012-11-08 16:12 hhhker 阅读(1242) 评论(0) 推荐(0) 编辑
摘要: 提到了resolveInstanceMethod,这个方法不仅在这里用,还用来实现消息的转发。消息的转发就是向对象发送一个它本身并没有实现的消息,在运行时确定它实际产生的行为。举个例子来说,一个Person对象,在运行时根据实际情况,决定是否响应fly这样的方法。如果条件具备,则fly被响应。否则,则不具备这样的方法。类似于AoP的做法。要实现消息转发,需要覆盖三个方法:1, resolveInstanceMethod(可选),这个方法为你提供了一个机会,在消息被发现本身没有在类中定义时你可以通过class_addMethod将它添加进去。如果你不这样做,不管你最终返回YES还是NO,程序都会 阅读全文
posted @ 2012-11-08 14:35 hhhker 阅读(445) 评论(0) 推荐(1) 编辑
摘要: Objective-C 2.0 的运行时环境叫做Morden Runtime,iOS 和Mac OS X 64-bit 的程序都运行在这个环境,也就是说Mac OS X 32-bit 的程序运行在旧的Objective-C 1.0 的运行时环境LegacyRuntime,这里我们只讲解Morden Runtime。同运行时交互主要在三个不同的地方,分别是A.Objective-C 源码(譬如:你定义的Category中的新方法会在运行时自动添加到原始类)、B.NSObject 的方法(isMemberClassOf 等动态判定的方法)、C.运行时函数。由于前两者在第一篇文档中讲解过,这里我们讲 阅读全文
posted @ 2012-11-08 11:15 hhhker 阅读(4282) 评论(0) 推荐(1) 编辑