发送消息并希望对象响应是“更好的样式”,还是检查它是否响应选择器,如果不响应,则有某种回退。
例如:
- (NSString *)stringForObjectValue:(id)obj {
if ([obj respondsToSelector:@selector(intValue)]) {
NSString *roman = [self formatRomanNumber:[obj intValue] resultSoFar:@""];
return roman;
} else {
return [NSString stringWithFormat:@"can't format a %@", [obj class]];
}
}
与
- (NSString *)stringForObjectValue:(id)obj {
NSString *roman = format_roman(@"", [obj intValue]);
return roman;
}
(示例来自nsNumberFormatter子类…但它可能来自nsObjectFormatter子类…)
最佳答案
如果您不能确保100%到您的函数的实例响应选择器,则必须执行该检查,以避免在运行时崩溃。
当obj
不响应intValue
选择器时,如何处理这些情况可能取决于使用方法的特定上下文。例如,在这种情况下,您可以从方法返回nil对象,这样您就可以很容易地看到出了问题。
关于objective-c - 使用的是responsToSelector:好样式吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3847628/