【问题标题】:import different interface based on iOS version根据iOS版本导入不同的界面
【发布时间】:2012-03-27 01:41:40
【问题描述】:

我创建了一个 CustomURLConnection 类。

如果我的 iOS 版本大于 5.0 那么我想使用

@interface CustomURLConnection : NSURLConnection<NSURLConnectionDataDelegate,NSURLConnectionDelegate>

否则我想使用

@interface CustomURLConnection : NSURLConnection 

我该怎么做?

【问题讨论】:

  • 两者有什么区别?
  • @OhhMee。我已经更新了这个问题。请检查它!

标签: ios ios5 preprocessor


【解决方案1】:

您可以使用预处理器指令执行这些操作:

#ifdef __IPHONE_5_0 
//Put your ios 5 specific code here
#else
//Put your other code here
#endif

【讨论】:

  • 如何使用这些预处理器指令检查大于 (>) 5.0 的版本
  • 这个常数将在所有等于或大于 5 的版本中定义。但是,如下所述,您应该确定这是您想要的。如果功能仅略有不同,则应在运行时检查版本。
  • 重新审视这个问题,我不确定这个答案是否真的正确。我认为这将基于编译 SDK 版本,而不是实际的 iOS 版本。这个答案有用吗?
【解决方案2】:

@interface 是一个编译时构造,它允许编译器知道命名符号是一个类类型,并为它提供足够的信息,以便根据其他人似乎滥用该类的情况适当地生成警告消息演员。

因此,您无法对@interface 进行任何操作,使其看起来有所不同,具体取决于启动应用程序的操作系统版本。你希望它做什么——打印出你会收到的所有编译器警告?

在 Objective-C 世界中,最好的解决方案始终是针对最新的 SDK 构建,在 Info.plist 中设置应用程序设计的最低 iOS 版本,并在运行时检查(使用 NSClassFromString、@987654324 @ 等)用于任何可能因此而缺失的功能。

在您的情况下,将协议声明留在其中并且不三思而后行,绝对没有问题。

【讨论】:

    【解决方案3】:

    您是否正在构建和销售两个不同版本的应用程序?

    预处理器指令仅在您有多个单独编译的应用版本时才有意义。如果您有一款应用需要根据用户的 iOS 版本表现出不同的行为,则需要通过运行时检查来实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2023-02-02
      • 2012-11-04
      • 2021-07-14
      相关资源
      最近更新 更多