В Objective-C вы можете изменить динамический тип объекта во время выполнения, назначив его isa
переменной-члену:
id object = ...;
object->isa = [SomeClass class];
Это неопределенное поведение? В настоящее время я делаю это как кладж для чего-то другого, и, похоже, это работает, но я чувствую себя таким грязным, делая это таким образом. Новый класс, который я устанавливаю, не добавляет никаких переменных-членов, он просто переопределяет один метод и добавляет новый, поэтому размер класса остается прежним. Я чувствую, что если бы я изменил размер объекта, это привело бы к большим неприятностям.