我必须在这里object_getInstanceVariable
工作,但它似乎只适用于浮点数、布尔值和整数,而不是双精度数。我确实怀疑我做错了什么,但我一直在绕圈子。
float myFloatValue;
float someFloat = 2.123f;
object_getInstanceVariable(self, "someFloat", (void*)&myFloatValue);
有效,并且 myFloatValue = 2.123
但是当我尝试
double myDoubleValue;
double someDouble = 2.123f;
object_getInstanceVariable(self, "someDouble", (void*)&myDoubleValue);
我明白了myDoubleValue = 0
。如果我尝试myDoubleValue
在函数之前设置,例如。,当我在调用double myDoubleValue = 1.2f
后读取它时,该值没有变化。object_getInstanceVariable
在上面的函数返回 2 之前设置myIntValue
为其他值getinstancevar
,即。它已经改变了。
然后我尝试了
Ivar tmpIvar = object_getInstanceVariable(self, "someDouble", (void*)&myDoubleValue);
如果我这样做,ivar_getName(tmpIvar)
我会得到“someDouble”,但myDoubuleValue = 0
仍然!然后我尝试ivar_getTypeEncoding(tmpIvar)
并得到应有的“d”。
总而言之,如果typeEncoding = float
它有效,如果它是双精度数,则结果未设置,但它正确读取了变量并且返回值(Ivar)也是正确的。
我一定是在做一些我看不到的基本错误,所以如果有人能指出,我将不胜感激。