我的代码分布在一个库中,如下所示:
if ([[NSString class] instancesRespondToSelector: @selector(JSONValue)]) {
NSString *jsonString = [[[NSString alloc] initWithData: jsonData encoding: NSUTF8StringEncoding] autorelease];
dict = [jsonString performSelector: @selector(JSONValue)];
}
由于某种原因,调用该方法-[__NSCFString JSONValue]: unrecognized selector sent to instance
时会引发异常。performSelector:
这是分布在我编写的库中的代码,但我自己无法重现或调试它。相反,第三方正在报告此问题。在什么情况下instancesRespondToSelector:
实际调用方法时会performSelector:
抛出异常?
编辑 有一个案例可以解释为什么会发生这种情况,但这没有意义。如果开发人员要做这样的事情:
@implementation NSString (OurHappyCategory)
+ (BOOL)instancesRespondToSelector:(SEL)aSelector
{
return YES;
}
@end
它会解释为什么代码正在执行,但这当然是一件非常糟糕的事情。有没有办法让这个问题发生有意义?