sol*_*sol 5 runtime class objective-c
在界面中我有这个:
Animal* myPet;
Run Code Online (Sandbox Code Playgroud)
在运行时我可能希望myPet是一只猫或一只狗,它们是Animal的子类:
id newPet;
if(someCondition) {
newPet = [[Cat alloc] initWithNibName:@"Cat" bundle:nil];
} else {
newPet = [[Dog alloc] initWithNibName:@"Dog" bundle:nil];
}
self.myPet = newPet;
Run Code Online (Sandbox Code Playgroud)
显然这是不正确的,但我希望它足以显示我正在尝试做的事情.这样做的最佳做法是什么?
isKindOfClass 是你的朋友:
[newPet isKindOfClass:Dog.class] == NO
Run Code Online (Sandbox Code Playgroud)
强类型newPet作为Animal *代替id.id可以容纳任何类的实例的引用,但性能不能用它来使用(点语法需要一个强类型的左值.)由于两个Cat和Dog继承Animal,这将是完全正确和有效的.
如果您使用的是两个不共享共同祖先(过去NSObject)的类,那么您应该退后一步并重新考虑您的设计 - 为什么这两个类的实例需要占用相同的变量?
| 归档时间: |
|
| 查看次数: |
6002 次 |
| 最近记录: |