该forwardInvocation方法是您想要使用的方法.在对象上调用不存在的选择器时会自动调用它.此方法的默认行为是调用doesNotRecognizeSelector:(将调试信息输出到控制台),但您可以覆盖它执行任何操作.Apple推荐的一种方法是让此方法将方法调用转发给另一个对象.
- (void)forwardInvocation:(NSInvocation *)anInvocation
Run Code Online (Sandbox Code Playgroud)
请注意,这forwardInvocation是一个相当昂贵的操作.NSInvocation对象需要由框架创建,并且(可选)用于在另一个实例上调用选择器.如果您正在寻找(相对)更快的方法来检测不存在的选择器,那么您可以选择实现forwardingTargetForSelector.
- (id)forwardingTargetForSelector:(SEL)aSelector
Run Code Online (Sandbox Code Playgroud)
Apple应该有关如何有效地覆盖这些方法的文档,还有一些需要注意的问题,特别是在覆盖forwardInvocation同一个对象上的方法时会有缺少的选择器.
是的,您可以使用resolveClassMethod:类方法(在NSObject上定义):
这里还有一些需要注意的事情(第一次难住了我):http://iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |