在界面中,我有这个:
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 *
而不是id
。 id
可以保存对任何类的实例的引用,但是不能与之一起使用属性(点语法需要强类型化的lvalue。)由于Cat
和Dog
都继承自Animal
,因此这将是完全正确和有效的。
如果您使用的是两个不具有共同祖先的类(过去NSObject
),那么您应该退后一步,重新考虑您的设计-为什么这两个类的实例需要占用相同的变量?
关于objective-c - objective-c -在运行时确定类类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4621171/