В интерфейсе у меня есть это:Objective C - определить тип класса во время выполнения
Animal* myPet;
Во время выполнения я могу хотеть myPet быть кошка или собака, которые являются подклассами животных:
id newPet;
if(someCondition) {
newPet = [[Cat alloc] initWithNibName:@"Cat" bundle:nil];
} else {
newPet = [[Dog alloc] initWithNibName:@"Dog" bundle:nil];
}
self.myPet = newPet;
Очевидно, это неверно, но я надеюсь, что этого достаточно, чтобы показать, что я пытаюсь сделать. Какова наилучшая практика для этого?
И почему вы сказали это неправильно? –
Обратите внимание, что выполнение большого количества 'isKindOfClass:' в вашем коде обычно является признаком того, что вы делаете что-то трудное. – bbum
@Dave - Потому что он не работает. Если я попробую newPet.hunger = 50, я получаю ошибку: запрос для члена 'hunger' в 'newPet', который относится к классу non-class 'objc_object *' – sol