一個有趣的現象(蘋果的bug Or 坑?),關於區分真機和模擬器的預編譯巨集

openglnewbee發表於2014-05-07

TARGET_IPHONE_SIMULATOR和TARGET_OS_IPHONE 是蘋果的兩個巨集定義,

在真機sdk中位於ios->usr/include/targetconditionals.h中,

在模擬器sdk中位於simulator->usr/include/targetconditionals.h

(筆者此時使用的xcode版本為5.1,sdk版本是7.1)


仔細看其模擬器sdk中的定義:

    #define TARGET_OS_IPHONE            1
    #define TARGET_IPHONE_SIMULATOR     1


再來看真機sdk中的定義:


    #define TARGET_OS_IPHONE            1
    #define TARGET_IPHONE_SIMULATOR     0


可以發現兩者的區別僅在於TARGET_IPHONE_SIMULATOR 的值,而TARGET_OS_IPHONE 則是一樣,都是真。


所以,我們區分真機模擬器的時候務必用TARGET_IPHONE_SIMULATOR來判斷,使用TARGET_OS_IPHONE將不會有效果。

這個和正常人的邏輯應該是有衝突的吧(反正筆者是這麼認為的,汗)

所以大家使用的時候要注意一下,不要被蘋果給坑了哦~

相關文章