【问题标题】:#ifdef macros for versions controlling#ifdef 用于版本控制的宏
【发布时间】:2010-07-31 07:32:04
【问题描述】:

我使用宏来区分版本,但我无法强制它正常工作。我用过:

#ifdef _IPHONE_4_0
  [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
 #else
  [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
 #endif

#if __IPHONE_OS_VERSION_MAX_ALLOWED < _IPHONE_4_0
  [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
 #else
  [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
 #endif

#if defined(__IPHONE_4_0)
  [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
 #else
  [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
 #endif

无论我使用什么版本 - 总是只调用其中一行。并且始终定义 __IPHONE_4_0。有什么想法吗?

最好的问候, 德米特里 M.

【问题讨论】:

    标签: iphone version-control version conditional-compilation ifdefine


    【解决方案1】:

    #if… 处理器指令在编译时解析。只要您为 4.0 SDK 编译,将始终选择 4.0 变体。

    如果您打算使应用程序适用于

    UIApplication* app = [UIApplication sharedApplication];
    if ([app respondsToSelector:@selector(setStatusBarHidden:withAnimation:)])
      [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
    else
      [app setStatusBarHidden:YES animated:YES];
    

    【讨论】:

    • 感谢您的回答。但是在这种情况下,这些宏可以使用什么呢?我认为 __IPHONE_OS_VERSION_MAX_ALLOWED 对于在不同操作系统上破坏的同一个应用程序会有所不同。没有?
    • 上帝没有。宏只影响编译器的状态——一旦应用程序被编译,它们就消失在RAM的迷雾中并且对应用程序没有进一步的影响。在这种情况下,Apple 使用它们来区分编译目标,以便一个头文件可用于多个目标并发出有用的错误和警告等。
    【解决方案2】:

    一个小小的改变 -

    以下代码应该可以工作:

     #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_4_0   
           [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
     #else   
           [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
     #endif
    

    请注意它是 __IPHONE_4_0 而不是 _IPHONE_4_0

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 2018-01-28
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多