для дуги:
Вдохновленный этим ответом: object_getIvar не может прочитать значение BOOL iVar .
Вы должны вызвать вызов функции для object_getIvar, чтобы получить ivars базового типа.
typedef int (*XYIntGetVariableFunction)(id object, const char* variableName);
XYIntGetVariableFunction intVariableFunction = (XYIntGetVariableFunction)object_getIvar;
int result = intVariableFunction(object, intVarName);
Я сделал небольшой полезный макрос для быстрого определения таких указателей на функции:
#define GET_IVAR_OF_TYPE_DEFININTION(type, capitalized_type) \
typedef type (*XY ## capitalized_type ## GetVariableFunctionType)(id object, Ivar ivar); \
XY ## capitalized_type ## GetVariableFunctionType XY ## capitalized_type ## GetVariableFunction = (XY ## capitalized_type ## GetVariableFunctionType)object_getIvar;
Затем для базовых типов вам нужно указать вызовы к макросу (например, параметры будут соответствовать (long long, LongLong)):
GET_IVAR_OF_TYPE_DEFININTION(int, Int)
И после этого становится доступной функция для получения типа переменной int (или указанного):
int result = XYIntGetVariableFunction(object, variableName)