在界面中,我有这个:

Animal*     myPet;

在运行时,我可能希望myPet是猫或狗,它们是Animal的子类:
    id newPet;
    if(someCondition) {
            newPet = [[Cat alloc] initWithNibName:@"Cat" bundle:nil];
    } else {
            newPet = [[Dog alloc] initWithNibName:@"Dog" bundle:nil];
    }
    self.myPet = newPet;

显然,这是不正确的,但是我希望它足以显示我正在尝试做的事情。最佳做法是什么?

最佳答案

强烈键入newPet作为Animal *而不是idid可以保存对任何类的实例的引用,但是不能与之一起使用属性(点语法需要强类型化的lvalue。)由于CatDog都继承自Animal,因此这将是完全正确和有效的。

如果您使用的是两个不具有共同祖先的类(过去NSObject),那么您应该退后一步,重新考虑您的设计-为什么这两个类的实例需要占用相同的变量?

关于objective-c - objective-c -在运行时确定类类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4621171/

10-09 18:30