Will #if __IPHONE_4_0 work on iPad?

匿名 (未验证) 提交于 2019-12-03 02:31:01

问题:

Will this check work on the iPad as well as iPhone? I guess I am just confused about using the term "iPhone" on an iPad. Is there something else I need to check for iPad OS version or does the macro refer to the general iOS version.

#if __IPHONE_4_0 // Do stuff #elif __IPHONE_3_0 // Do 3.0 stuff #endif 

回答1:

The problem with __IPHONE_3_0 and the like is that they are defined even if targeting other iOS versions; they are version identification constants, not constants that identify the target iOS version. Use __IPHONE_OS_VERSION_MIN_REQUIRED

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0 #elif __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_0 #else #endif 

or even:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 #elif __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000 #else #endif 

to get around the bug mentioned in the comments for "How to target a specific iPhone version?" __IPHONE_OS_VERSION_MAX_ALLOWED might also be of use, in limited circumstances.

And, yes, it doesn't matter what device the app will run on. These constants are defined by the compiler and don't exist on the devices. Once the pre-processor runs, no macros are left. Though there are differences in the devices themselves, the iPhone and iPad both run iOS, and that's what you're really targetting.



回答2:

The code you posted is a compiler directive. This means that it will not run on iPad or iPhone. It is handled when you build your app binary. Incidentally, if you're building for iPad, then you are building for 3.2, not 3.0 or 4.0.

If you use 3_2 or 4_2 instead of 3_0 or 4_0 it should work.

Good luck.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!