在我的程序中,我在顶部有#define MAXIMUM_SCALE 10
此常量使用的唯一时间是代码部分:
float newScale = [scrollView zoomScale] * ZOOM_STEP;
NSLog(@"%f", newScale);
NSLog(@"lol %f", MAXIMUM_SCALE);
if( [scrollView zoomScale] < MAXIMUM_SCALE){
[self handleZoomWith:newScale andZoomType: TRUE];
}
一些如何,NSLog打印出MAXIMUM_SCALE与newScale相同
即。 (1.500000 lol 1.500000 2.250000 lol 2.250000)
为什么会这样?
答案 0 :(得分:9)
使用#define MAXIMUM_SCALE 10
时,您定义的是整数常量,而不是浮点数。我猜你的代码是为x86-64编译的。在该体系结构中,浮点和整数变量通过不同类型的寄存器传递。由于对NSLog
的第二次调用不使用任何浮点参数,因此前一次调用的值仍将位于用于检索值的寄存器中,这意味着您将从上一次调用中获取值时间。您应该在第二个NSLog
上收到编译器警告,告诉您参数与传递的格式不匹配。您可以通过告诉编译器MAXIMUM_SCALE
应该是浮点数来解决这个问题。
#define MAXIMUM_SCALE 10.0f
小数告诉编译器你想要一个浮点数而不是一个整数,而f
告诉编译器使用float
类型而不是double
。
答案 1 :(得分:1)
更改
NSLog(@"lol %f", MAXIMUM_SCALE);
到
NSLog(@"lol %d", MAXIMUM_SCALE);