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

时间:2009-05-27 07:46:13

标签: objective-c cocoa backwards-compatibility

我有一个针对Mac OS X 10.4和10.5的项目,其中10.5是基础SDK。

10.4中没有像-[NSString stringByReplacingOccurrencesOfString:withString]这样的方法。我可以手动实现功能。另一个选择是将该方法作为一个类别实现,但这会使10.5实现混乱,这是我想要避免的。

那么如何在不破坏10.5的情况下在10.4中实现这样的方法,并且当我决定停止支持10.4时,我可以轻松地实现这些方法?

6 个答案:

答案 0 :(得分:2)

如果方法尚不存在,我认为您必须使用+load and +initializeload a method at runtime

答案 1 :(得分:2)

if ([myString respondsToSelector: @selector(stringByReplacingOccurrencesOfString:withString:)])
{
  // 10.5 implementation
}
else
{
  // 10.4 implementation
}

答案 2 :(得分:2)

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

当你去Leopard时,做一个项目搜索“TigerCompatible”,然后点燃所有这些方法并取消标记他们所有的呼叫站点。

答案 3 :(得分:1)

如果在Tiger下运行,则将所有缺少的实现放在一个bundle中的类别中,该bundle在main()中启动时加载。

答案 4 :(得分:0)

如果为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

答案 5 :(得分:0)

你需要支持10.4吗?如果您在应用程序的核心部分中仅使用10.5方法,则可能需要考虑仅使用10.5。

无论如何,通过上面给出的具体示例,我建议远离它并制作字符串的可变副本,这样就可以在NSMutableString上使用类似的方法,它可以在10.4中运行