代码之家  ›  专栏  ›  技术社区  ›  Sijmen Mulder

10.5基础SDK,10.4部署:如何实现缺失的方法

  •  1
  • Sijmen Mulder  · 技术社区  · 17 年前

    一些方法,如 -[NSString stringByReplacingOccurrencesOfString:withString] 10.4中没有。我可以手工实现这个功能。另一种选择是将该方法实现为一个类别,但这会打乱10.5的实现,这是我想避免的。

    那么,我如何在10.4中实现这些方法,而不会弄乱10.5,并且当我决定停止支持10.4时,我可以很容易地取出实现呢?

    6 回复  |  直到 17 年前
        1
  •  2
  •   Georg Schölly Crazy Developer    17 年前

    我认为你必须使用 +load and +initialize load a method at runtime 如果该方法不存在。

        2
  •  2
  •   user23743 user23743    17 年前
    if ([myString respondsToSelector: @selector(stringByReplacingOccurrencesOfString:withString:)])
    {
      // 10.5 implementation
    }
    else
    {
      // 10.4 implementation
    }
    
        3
  •  2
  •   Peter Hosey    17 年前

    使用类别,但在方法名称上添加标签;例如, stringByReplacingOccurrencesOfString_TigerCompatible: 。在实现中,调用Leopard的实现或您自己的实现。

    当你只使用Leopard时,在一个项目中搜索TigerCompatible,然后烧掉所有这些方法并取消标记它们的所有调用站点。

        4
  •  1
  •   Christopher Lloyd    17 年前

    如果在Tiger下运行,请将所有缺失的实现分类放入一个包中,该包在main()中启动时加载。

        5
  •  0
  •   Matt Ball    17 年前

    如果它是为10.4构建的,那么使用C预处理器宏插入相关方法怎么样?也许试着在一个类别中做这样的事情,这样10.4中不存在的方法只有在为10.4构建时才会被包括在内?

    #if defined(MAC_OS_X_VERSION_10_4) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
    // Put your implementations of the methods here
    #endif
    
        6
  •  0
  •   Martin Pilkington    17 年前

    你需要支持10.4吗?如果你在应用程序的核心部分只使用10.5的方法,那么可能是时候考虑只使用10.5了。

    不管怎样,对于上面给出的具体示例,我建议不要这样做,而是为字符串创建一个可变副本,这样你就可以在NSMutableString上使用类似的方法,这种方法在10.4中确实有效