我有一个针对Mac OS X 10.4和10.5的项目,其中10.5是基础SDK。
10.4中没有像-[NSString stringByReplacingOccurrencesOfString:withString]
这样的方法。我可以手动实现功能。另一个选择是将该方法作为一个类别实现,但这会使10.5实现混乱,这是我想要避免的。
那么如何在不破坏10.5的情况下在10.4中实现这样的方法,并且当我决定停止支持10.4时,我可以轻松地实现这些方法?
答案 0 :(得分:2)
如果方法尚不存在,我认为您必须使用+load
and +initialize
到load 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中运行