【问题标题】:iOS: how to develop for different targetsiOS:如何针对不同的目标进行开发
【发布时间】:2013-01-03 12:42:57
【问题描述】:

我有一个 Xcode 项目,其中包含三个不同的目标(例如足球、棒球、篮球),从而产生了三个不同的应用程序。大多数代码是相同的,但有时它是特定于目标的。

实现特定于目标的方法的最佳方式是什么?我想避免

if ([AppDelegate isSoccerTarget] {
   ...
} else if () {
   ...
} else if () {
   ...
}

我正在考虑使用仅存在于三个目标之一中的类别,但是我不能使用默认实现。而且我想避免继承,因为某些类已经在类层次结构中,我想保持简单(避免 person => player、manager 导致 footballPlayer、basketballPlayer 等)。

你的做法是什么?

【问题讨论】:

    标签: ios xcode targets


    【解决方案1】:

    我处理它的方式是将任何相似的东西放在一个添加到所有目标的超类中,然后我创建一个对每个目标都不同的新类(例如“Player”)。

    所以在源目录中我会有子目录和文件:

    篮球/Player.m 棒球/Player.m ...

    然后我会选择basketball/Player.m 的“Target Membership”作为“Basketball”目标。

    这样我只需要实例化一个 Player 类一次,根据我的目标,它会自动创建正确的类。希望这会有所帮助。

    【讨论】:

    • 听起来不错!唯一的一点:有没有一种简单的方法可以找出哪些类是特定于目标的?我的意思是:如果添加了新目标,您如何轻松知道必须实现哪些类和方法?还是没有一种简单的方法可以实现这一目标?
    • 我将每个目标特定类放入与该目标关联的组中。我不知道这样做的自动方式,但 Xcode 将允许您在左侧项目浏览器中手动对它们进行分组。在这一点上,这只是您认为对它们进行分组的最佳方式的偏好问题。
    【解决方案2】:

    您将在 Xcode 项目窗格(最顶部的文件)中创建您的目标,然后在每个目标的其中一个选项卡中(我忘记是哪一个)在 预处理器宏中添加一些值(可能是预编译器宏)。然后,在您的代码中,您可以这样做:假设棒球目标的预处理器宏称为 BASEBALL,而足球是 SOCCER。您的代码如下所示:

    ...blablablaothercode...
    #ifdef BASEBALL
          NSLog(@"Baseball!");
    #endif
    #ifdef SOCCER
          NSLog(@"Soccer!");
    #endif
    ...blablablaothercode...
    

    这些可以在任何可以使用普通代码的地方使用。把它想象成一个“switch”语句,编译器可以使用它来查看每个目标使用什么代码。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2012-03-14
      • 2016-01-13
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      相关资源
      最近更新 更多