Objective c 如何抑制a";类可能不响应'-方法';使用变量方法名发出警告?

Objective c 如何抑制a";类可能不响应'-方法';使用变量方法名发出警告?,objective-c,Objective C,如何使用变量选择器名称防止此警告 NSString *methodName; SEL method = NSSelectorFromString(methodName); if ([self respondsToSelector:method]) { if ([methodName hasSuffix:@":"]) [self method:dict]; else [self method]; } 使用 而不是 [self method]

如何使用变量选择器名称防止此警告

NSString *methodName;

SEL method = NSSelectorFromString(methodName);

if ([self respondsToSelector:method]) {

    if ([methodName hasSuffix:@":"])
        [self method:dict];
    else
        [self method];

}
使用

而不是

[self method];
[self method:dict];

而不是

[self method];
[self method:dict];

西迪尔的答案是可行的,但有更好的解决办法

通常,您会声明一个协议:

 @protocol MyOptionalMethods
 @optional
 - (void)method:(NSDictionary*)dict;
 @end
id<MyOptionalMethods> foo;
UIView*<MyOptionalMethods> bar; // it'll be a subclass o' UIView and may implement pro to
并声明您的对象符合协议:

 @protocol MyOptionalMethods
 @optional
 - (void)method:(NSDictionary*)dict;
 @end
id<MyOptionalMethods> foo;
UIView*<MyOptionalMethods> bar; // it'll be a subclass o' UIView and may implement pro to
这样,编译器就有机会对所有参数进行完全类型检查。同样,此模式不限于不接受参数或单个对象参数的方法


同样,这是针对迁移到ARC的未来证明(因为ARC正确地抱怨performSelector:的脆弱性)。

不幸的是,这不适用于变量方法名称。这是正确的,但是——通常——变量方法名称是设计拙劣的标志。当然不总是,太棒了。你真的解决了我的下一个问题!这是对[自我方法]的冲击,现在我知道为什么了。希望我能给你更多的分数:)谢谢Joris,总是很乐意帮忙。