处理object_getIvar的返回值(id对象,Ivar ivar)

时间:2009-08-01 09:49:02

标签: objective-c variables return-value objective-c-runtime

1)如果Ivar是一个对象,object_getIvar(id对象,Ivar ivar)返回一个'id'。如果变量是一个NSString,可能是包含该值的id = NSString。那是对的吗?或者我需要做什么才能访问Ivar的值。

2)如果Ivar是一个float / int等什么会返回什么,我怎么把它转换成我可以使用的东西(一个浮点数或int是好的,因为我可以使用NSNumber numberWithXXX将它转换为一个对象)

2 个答案:

答案 0 :(得分:1)

1)正确。正如docs所述:

  

返回值
  由ivar指定的实例变量的值,如果object为nil,则为nil。

2)无论Ivar的类型如何,您都将获得Ivar所持有的价值。您可以使用ivar_getTypeEncoding确定Ivar的类型。有一个列表中的各种类型编码here

掌握了这些信息,您应该能够编写一个适当处理每个案例的开关; e.g:

警告:未经测试的代码)

const char* typeEncoding = ivar_getTypeEncoding(var);

switch (typeEncoding) {
    case '@': {
        // handle class case
    } break;

    case 'i': {
        // handle int case
    } break;

    case 'f': {
        // handle float case
    } break;

    // .. and so on
}

答案 1 :(得分:1)

用于打印任意对象描述的示例:

wx.Dialog