为什么(int)[@“ - 1”floatValue]不返回-1

时间:2011-11-03 06:57:12

标签: objective-c casting nsstring

我在gdb中测试了这个表达式:

(gdb) p (int)[@"-1" floatValue]
$2 = 1

(gdb) p (int)((float)[@"-1" floatValue])
$7 = -1

按照我的预期出现

为什么第一个表达式不返回-1?另外,[@"-1" floatValue]的返回类型是什么?

1 个答案:

答案 0 :(得分:6)

gdb不知道方法(或函数)的返回类型:

(gdb) p [@"-1" floatValue]
Unable to call function "objc_msgSend" at 0x155d08c: no return type information available.
To call this function anyway, you can cast the return type explicitly (e.g. 'print (float) fabs (3.0)')

将表达式强制转换为int时,gdb会假定该方法返回int。因此,它知道可以使用objc_msgSend发送邮件,并将objc_msgSend的返回值视为int

将表达式强制转换为float时,gdb会假定该方法返回float。所以它知道它应该使用objc_msgSend_fpret来发送消息并将返回值视为浮点数。

这很重要,因为:

  

在i386平台上,ABI函数返回一个浮点数   value与返回积分的函数不兼容   类型。因此,在i386平台上,必须使用objc_msgSend_fpret   对于函数[sic]返回非整数类型的函数。