如何使用变量选择器名称阻止此警告?
NSString *methodName;
SEL method = NSSelectorFromString(methodName);
if ([self respondsToSelector:method]) {
if ([methodName hasSuffix:@":"])
[self method:dict];
else
[self method];
}
答案 0 :(得分:9)
使用
[self performSelector:method];
而不是
[self method];
和
[self performSelector:method withObject:dict];
而不是
[self method:dict];
答案 1 :(得分:3)
通常,您会声明一个协议:
@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
然后检查:
if ([foo respondsToSelector:@selector(method:)])
[foo method: dict];
这样,编译器就有机会完全键入检查所有参数。同样,这种模式不仅限于不带参数或单个对象参数的方法。
同样,这可以防止迁移到ARC(因为ARC正好抱怨performSelector的脆弱性:)。