一個有趣的現象(蘋果的bug Or 坑?),關於區分真機和模擬器的預編譯巨集
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將不會有效果。
這個和正常人的邏輯應該是有衝突的吧(反正筆者是這麼認為的,汗)
所以大家使用的時候要注意一下,不要被蘋果給坑了哦~
相關文章
- 關於VS中區分debug與release,32位與64位編譯的巨集定義編譯
- 關於你的網際網路生活的十個有趣現象
- NDK clang編譯器的一個bug編譯
- Android開發中真機和模擬器的體驗Android
- VS編譯器優化誘發一個的Bug編譯優化
- 如何預編譯 Android 模擬器專用核心編譯Android
- 一個關於recyclerView的bugView
- 關於UIInterfaceOrientation的一個bugUI
- 帶你深入 Dart 解析一個有趣的引用和編譯實驗Dart編譯
- MySQL關於timestamp和mysqldump的一個“bug”MySql
- 一個有趣的CSS例項——模擬Google公司LogoCSSGo
- Oracle關於nvl的一個BugOracle
- 關於虛擬機器的使用虛擬機
- 用 golang 寫一個語言(編譯器,虛擬機器)Golang編譯虛擬機
- 從編譯原理看一個直譯器的實現編譯原理
- 實現一個簡單的 JavaScript 編譯器JavaScript編譯
- 發現了一個關於 gin 1.3.0 框架的 bug框架
- 【Mysql】關於一個mysql的坑比時區問題MySql
- 一個關於資料庫關閉很有意思的現象資料庫
- 開源一個Flutter編寫的完整終端模擬器Flutter
- 關於JSP預編譯的中文問題JS編譯
- 關於程式的編譯和連結編譯
- 關於支援OPenACC的編譯器說明編譯
- g++的編譯器真強大編譯
- 關於模擬 new操作符的實現
- 關於預編譯頭 (轉)編譯
- 關於庫的編譯編譯
- 關於虛擬機器聯網的幾個問題虛擬機
- 模擬SQLserver死鎖現象SQLServer
- 合併FrameWork庫相容真機模擬器Framework
- Ubuntu編譯Android整個系統以及編譯指定模組到模擬器Ubuntu編譯Android
- Himanshu Mehra:關於手機APP的 15 個有趣事實APP
- 【小貼士】關於transitionEnd/animate的一個有趣故事
- 關於oracle死鎖的模擬Oracle
- 伺服器的獨立機器和虛擬機器的區別伺服器虛擬機
- 軟體測試:關於效能測試中使用物理機和虛擬機器的區別虛擬機
- 翻譯的未來:翻譯機器和譯後編譯編譯
- javascript編寫一個簡單的編譯器JavaScript編譯