【问题标题】:iPhone how to check the type of an Object?iPhone如何检查对象的类型?
【发布时间】:2010-11-24 23:37:20
【问题描述】:

我想检查一个对象的类型。我该怎么做?

场景是我得到一个对象。如果该对象属于 A 类型,则执行一些操作。如果是 B 类,则进行一些操作。目前对象的类型是 C,它是 A 和 B 的父对象。

我有两个课程AViewControllerBViewController。我在UIViewController 中得到的对象。现在如何判断对象是AViewController还是BViewController

【问题讨论】:

标签: iphone uiview uiviewcontroller


【解决方案1】:

NSObject 上有一些方法可以让你检查类。

首先是-class,它将返回您的对象的类。这将返回 AViewController 或 BViewController。

然后有两种方法,-isKindofClass:isMemberOfClass:

-isKindOfClass: 将接收者与作为参数传入的类进行比较,并根据该类是否为同一类型或给定类的子类返回真或假。

-isMemberOfClass: 会将接收者与作为参数传入的类进行比较,并根据该类是否与给定类严格相同来返回真或假。

【讨论】:

    【解决方案2】:

    Objective-C 中更常见的模式是检查对象是否响应您感兴趣的方法。示例:

    if ([object respondsToSelector:@selector(length)]) {
        // Do something
    }
    
    if ([object conformsToProtocol:@protocol(NSObject)]) {
        // Do something
    }
    

    【讨论】:

    • 这是对的,但在这种情况下不是很有帮助。提问者感兴趣的两个对象都是特定视图控制器的子类。每个人都可以实现相同的方法,但行为不同。所以他/她需要知道他们处理的是哪个子类。
    • 如果是这种情况,您可能应该重构您的设计。 isKindOfClass:肯定会起作用,但从长远来看通常不是很容易维护。
    【解决方案3】:
    if([some_object isKindOfClass:[A_Class_Name class]])
    {
        // do somthing
    }
    

    【讨论】:

    • @Jasarien 的帖子更具体。例如比较一个对象是否是 KindOfClass [UIView 类] 甚至会返回所有 UIImageViews、UIImages、UIRoundRectButtons ..... 所以在这种情况下,“isMemberOfClass 可能是更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多