我是靠谱客的博主 感性发夹,最近开发中收集的这篇文章主要介绍苹果系列:跨平台编译的宏定义选择(区分ios和mac),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

大意:

光用TARGET_OS_MAC并不能够区分ios和mac,需要像这样:

#if TARGET_OS_IPHONE
#define VIEW_CLASS UIView
#elif TARGET_OS_MAC
#define VIEW_CLASS NSView
#endif

先检查TARGET_OS_IPHONE 这个宏,在ios下(无论真机还是模拟器)该宏被定义;若未定义该宏则检查TARGET_OS_MAC。



原文如下:

Yesterday, I was messing around building shared NSLayoutConstraint code to be used across iOS and OS X. I put in a few #if TARGET_OS_MAC directives, assuming they'd just work.

They didn't.

Turns out that you should always check for TARGET_OS_IPHONE first, before TARGET_OS_MAC because the latter is true on the iPhone but the former is not on OS X.

Here are some of the most common checks suggested to me yesterday as I messed with this dilemma.

  • #if TARGET_OS_MAC
  • #if TARGET_OS_IPHONE
  • #if TARGET_IPHONE_SIMULATOR
  • #if TARGET_OS_EMBEDDED
  • #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
  • #if defined(__IPHONE_OS_MIN_VERSION_REQUIRED)

And here are the results of running them on the Simulator, iPhone device and OS X:

SIMULATOR
Target OS Mac
Target OS iPhone
No Target OS Embedded
Target iPhone Simulator
Mac OS X Version Min Required is NOT defined
iPhone OS X Version Min Required is NOT defined

PHONE
Target OS Mac
Target OS iPhone
Target OS Embedded
No Target iPhone Simulator
Mac OS X Version Min Required is NOT defined
iPhone OS X Version Min Required is NOT defined

OS X
Target OS Mac
No Target OS iPhone
No Target OS Embedded
No Target iPhone Simulator
Mac OS X Version Min Required is defined
iPhone OS X Version Min Required is NOT defined

Since I was most interested in determining whether to use NSBox/NSView vs UIView, my solution ended up looking like this:

#if TARGET_OS_IPHONE
#define VIEW_CLASS UIView
#elif TARGET_OS_MAC
#define VIEW_CLASS NSView
#endif

This approach ensured that the iPhone platform triggered first, and then the second check mandated OS X. This created definitions that allowed my code to successfully compile and execute cross-platform.




最后

以上就是感性发夹为你收集整理的苹果系列:跨平台编译的宏定义选择(区分ios和mac)的全部内容,希望文章能够帮你解决苹果系列:跨平台编译的宏定义选择(区分ios和mac)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部