iPhone,正在使用isKindOfClass以任何方式被认为是不好的做法?

Rob*_*ert 6 cocoa cocoa-touch objective-c

例如,如果存在'handle all'类型方法...

if ([obj isKindOfClass:class1]) {
    // ...
} else if ([obj isKindOfClass:class2]) {
    // etc..
Run Code Online (Sandbox Code Playgroud)

这是不好的做法吗?是否有更简洁的替代方案或更好的方法来构建代码?

运行时,可读性,可维护性或任何东西都有缺点吗?

Cos*_*que 7

每当某些事物被认为是好/坏的做法时,它或多或少都是主观的.当做某事本质上是正确/错误时,它或多或少是客观的.

isKindOfClass:是检查类继承的有用方法.它回答了唯一的问题,"是一个类的对象是(给定类的一个子类)?".它没有回答任何其他问题,例如"这个对象以自己的方式实现该方法吗?" 或"我可以将对象用于X或Y吗?".如果isKindOfClass:按预期使用,则不会有任何问题.毕竟,在动态类型语言中,您应该有工具来提取有关对象的元信息.isKindOfClass:只是可用的工具之一.

某些物品可能与他们的课程有关,这一事实不应该让你失望.他们只是将自己伪装成另一个阶级的对象,而不会破坏任何东西.如果这不会破坏任何东西,我为什么要关心?

最重要的是,您应该始终记住使用正确的工具用于任何特定目的.例如,isKindOfClass:无法替代respondsToSelector:conformsToProtocol:.