Поскольку вы всегда загружаете объекты из одного и того же файла пера, вы всегда получаете одни и те же объекты. Если объект в кончике имеет тип BaseClass
, то при загрузке кончика вы получите объект типа BaseClass
. Неважно, что вы выделяете MyClass
- то, что вы выделяете, не вступает в игру, потому что вы присваиваете self
загруженному объекту. (На самом деле, поскольку вы никогда не освобождаете выделенную память до переназначения self
, вы теряете выделенную память.) Также не важно, что вы объявили указатель как MyClass*
- это позволяет вам вызывать -methodSpecificToThisClass
без получения жалобы от компилятора, но это не меняет того факта, что фактический объект является экземпляром BaseClass
. Когда вы вызываете этот метод, вы получаете ошибку «невыполненный селектор», когда среда выполнения пытается разрешить селектор и обнаруживает, что он не существует для этого объекта.
Если вы хотите загрузить MyClass
из пера, вам нужно будет использовать перо, содержащее MyClass
вместо BaseClass
.