在iOS上,将double传递给期望[单个]浮点数作为参数的方法时实际发生了什么?

jon*_*ley 2 objective-c llvm ios

说我有一个功能:

- (void) doSomethingWithFloat:(float)aFloat;
Run Code Online (Sandbox Code Playgroud)

我用双精度浮点值调用该函数,如下所示:

[self doSomethingWithFloat:12.0];
Run Code Online (Sandbox Code Playgroud)

在编译时或运行时是否从12.0(双精度)到12.0f(单个)完成转换,或者两者都没有?

为了清楚起见:我不是要求单精度和双精度浮点数之间的区别.

Dav*_*d H 5

ObjectiveC实际上遵循大多数C约定 - 因此当传递给函数时,浮点数被提升为C规范的两倍.ObjectiveC编译器最终将所有方法转换为函数,因此双重工作.

这表示最好打开编译器警告并传递CGFloats或浮点数 - 它只是让你知道你何时失去精度.