Objective-c: Swizzling класс приводит к потере свойств от отладки
Я создаю класс времени выполнения, а затем переворачиваю экземпляр, чтобы стать экземпляром этого нового класса.
MyClass *object = [MyClass new];
Class subclass = objc_allocateClassPair([MyClass class], "MyClass_RuntimeClass", 0);
objc_registerClassPair(subclass);
object_setClass(object, subclass);
Это отлично работает. Я могу вызывать методы и устанавливать свойства, определенные на MyClass после Swizzling.
Единственная проблема заключается в том, что отладчик больше не показывает свойства объекта.
Apple, кажется, преодолела эту проблему с помощью классов KVO.
Я попытался добавить свойства нового класса, используя class_addProperty, но это не удалось, так как они уже определены.
Есть что-то, чего мне не хватает?
1 ответ
Apple переопределяет class
метод для вызова реализации супер, таким образом фактически возвращая исходный класс (в вашем случае MyClass
). Если отладчик использует class
свойство решать, какие свойства показывать, будет запутано, так как не имеет определения для MyClass_RuntimeClass
,