2011-06-24 63 views
3

在我的節目,我有一個的#define MAXIMUM_SCALE 10上方Objective-C中的常量在奇蹟般地變化嗎?

唯一的一次,這個常數是有史以來採用的是在這部分代碼:

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笑1.500000 2.250000 2.250000笑)

這究竟是爲什麼?

回答

9

當您使用#define MAXIMUM_SCALE 10時,您正在定義一個整數常量,而不是一個浮點數。我猜你的代碼正在爲x86-64編譯。在該體系結構中,浮點和整數變量通過不同類型的寄存器傳遞。由於第二次調用NSLog時沒有使用任何浮點參數,因此前一次調用的值仍將存在於用於檢索該值的寄存器中,這意味着您每次都會從前一次調用中獲取該值。您應該在第二個NSLog上收到編譯器警告,告訴您參數與傳遞的格式不匹配。你可以通過告訴編譯器MAXIMUM_SCALE應該是浮點來解決這個問題。

#define MAXIMUM_SCALE 10.0f 

小數告訴你想要一個浮點數,而不是一個整數的編譯器和f告訴編譯器使用float類型,而不是double

+0

謝謝!我現在感到很傻。的xD – Lindsey

1

變化

NSLog(@"lol %f", MAXIMUM_SCALE); 

NSLog(@"lol %d", MAXIMUM_SCALE); 
相關問題