Ответ строго на свойства (как в class_copyPropertyList
), а не на переменные экземпляра (согласно class_copyIvarList
) вашего текущего кода ...
Люди обычно обдумывают проблему, используя кодирование значения ключа. Если вы используете valueForKey:
, то среда выполнения автоматически продвигает примитивы к типам объектов.
Если бы вы реализовали это на уровне Objective-C, вы бы получили NSMethodSignature
с использованием -methodSignatureForSelector:
и проверили свойство methodReturnType
, которое находится в стандартной форме кодирования типа Objective-C (т. Е. совпадение @encode
).
Работая напрямую со средой выполнения C, я думаю, вы бы использовали method_copyReturnType
на геттере.
Что касается переменных экземпляра, я не уверен, что есть способ запросить их тип.
Также обратите внимание, что нормальный способ справиться с этим состоит в том, чтобы объекты сами реализовывали isEqual:
. Это часть NSObject
, поэтому гарантированно всегда будет определяться. Сами классы должны реализовывать логику, необходимую для сравнения по значению.