Я пишу проект, и я хотел бы получить экземпляр суперкласса определенного объекта в время выполнения для целей разработки.Например, если у меня есть этот метод в классе с именем SomeClass :
+(id)generateSuperclassInstanceOfObject:(id)object {
if (object) {
NSLog(@"The class of the object is %@", [object class])
Class klass = [object superclass];
if (!klass)
NSLog(@"Klass not available");
else {
//NSLog(@"The superclass of the object is %@", NSStringFromClass(klass));
id superObject = (klass *)object;
//NSLog(@"Correctly generated the superclass instance!");
return superObject;
}
}
return NULL;
}
И, если у меня есть:
@interface A : NSObject
...
@end
@interface B : A
...
@end
@interface C : B
...
@end
, я бы хотел что-то сделатьпохоже, если у него есть хотя бы 2 суперкласса (как в моем случае):
C *object = [[C alloc] init];
id superInstance = [SomeClass generateSuperclassInstanceOfObject:object];
NSLog(@"Generated correct superInstance of class: %@", [superInstance class]);
id superSuperInstance = [SomeClass generateSuperclassInstanceOfObject:superInstance];
NSLog(@"Generated correct superInstance of class: %@", [superSuperInstance class]);
Где NSLog печатает:
The class of the object is C
Generated correct superInstance of class: B
The class of the object is B
Generated correct superInstance of class: A
В моем коде это выглядит
id superObject = (klass *) объект;
неверен, потому что klass не является типом. Мне нужно что-то, что позволяет мне приводить объект в этомособая ситуация, использующая «приведение, генерируемое во время выполнения», потому что я не знаю с самого начала иерархию объекта.
Самая важная часть заключается в следующем: я знаю, что «супер» существует, но мне нужно создать новый объект, удалив любую ссылку на его подкласс .Это должно быть допустимо для любого объекта, имеющего по крайней мере 2 суперкласса (поэтому в моем случае я не должен иметь возможность использовать метод generateSuperclassInstanceOfObject с аргументом superSuperInstance, поскольку он имеет NSObject в качестве суперкласса).
Любая помощь, пожалуйста