繁体   English   中英

课堂上的目标C和魔术方法

[英]Objective C and magic methods in class

objective-c是否提供了一种拦截对不存在的类方法的调用的方法?

forwardInvocation方法是您要使用的方法。 在对象上调用不存在的选择器时会自动调用它。 此方法的默认行为是调用doesNotRecognizeSelector:这是将调试信息输出到控制台的内容),但您可以覆盖它执行任何操作。 Apple推荐的一种方法是让此方法将方法调用转发给另一个对象。

- (void)forwardInvocation:(NSInvocation *)anInvocation

请注意, forwardInvocation是一个相当昂贵的操作。 NSInvocation对象需要由框架创建,并且(可选)用于在另一个实例上调用选择器。 如果您正在寻找一种(相对)更快的方法来检测不存在的选择器,那么您可以选择实现forwardingTargetForSelector

- (id)forwardingTargetForSelector:(SEL)aSelector

你应该有Apple如何有效地覆盖这些方法的文档 ,还有一些需要注意的问题,特别是在同一个对象上覆盖forwardInvocation方法时会有缺少的选择器。

是的,您可以使用resolveClassMethod:类方法(在NSObject上定义):

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

这里还有一些值得注意的事情(第一次难倒我): http//iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM