通过调用isKindOfClass检查类的类型是否更合适:或者通过仅检查它是否支持您通过respondsToSelector查找的方法来执行“duck typing”方法:?Objective-C:检查类的类型,最好使用isKindOfClass或respondsToSelector?
这里是我想的,两种方式编写代码:
for (id widget in self.widgets)
{
[self tryToRefresh:widget];
// Does this widget have sources? Refresh them, too.
if ([widget isKindOfClass:[WidgetWithSources class]])
{
for (Source* source in [widget sources])
{
[self tryToRefresh:source];
}
}
}
或者:
for (id widget in self.widgets)
{
[self tryToRefresh:widget];
// Does this widget have sources? Refresh them, too.
if ([widget respondsToSelector:(@selector(sources))])
{
for (Source* source in [widget sources])
{
[self tryToRefresh:source];
}
}
}
检查这个线程http://stackoverflow.com/questions/4913055/iphone-is-using-iskindofclass-considered-bad-practice-in-any-way – 2012-07-16 18:37:07
需要注意的是,在一般情况下,动态不鼓励检查班级的类型。委托模式之外的选择器响应也一样。 – bbum 2012-07-16 19:57:47