如何为不同的iOS版本定义代码

Sup*_*off 4 cocoa-touch objective-c deprecated ios

我正在开发iOS应用程序.我希望它支持iOS 7和8.它非常好,但是应用程序的许多不同部分都使用Apple API.其中一些API适用于iOS 8和7.但是,其中一些API在iOS 8中已弃用.因此,我去Apple开发者网站查看要替换它们的内容(new methods/etc ....).

但是,我现在遇到的问题是该应用程序可以在iOS 8上正常运行,但是它的某些部分在iOS 7上无法正常工作,因为我正在尝试使用iOS 8 API ......(笑) .

所以我只想知道,实现在iOS 8和7上运行的代码的最佳方法是什么.我有一些想法(下面),但我不确定哪个最好:

IDEA 1

每当我的代码在两个操作系统上都不起作用时,我会使用if函数(调用宏),如下所示:

if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
    // iOS 7 device. Use iOS 7 apis.
}

else {
   // iOS 8 (or higher) - use iOS 8 apis.
}
Run Code Online (Sandbox Code Playgroud)

IDEA 2

我正考虑在应用程序周围使用ifdef定义,如下所示:

#ifdef __IPHONE_8_0
     // iOS 8 code here....
#else
     // iOS 7 code here....
#endif
Run Code Online (Sandbox Code Playgroud)

哪种方式更好?我本以为第二个想法更快,使用的资源更少?

或者我的想法都是垃圾?有没有更好的方法来解决这个问题?

谢谢你的时间,丹.

Mid*_* MP 6

我不建议检查版本并根据它编写代码.相反,您需要检查该API是否可用.

用于检查是否有类:

Class checkClass = NSClassFromString(@"CheckingClass");

if (checkClass)
{
   // Available
}
else
{
  // Not Available
}
Run Code Online (Sandbox Code Playgroud)

如果您需要检查可用的功能/功能;

if ([checkClass respondsToSelector:@selector(yourMethod:)])
{
   // Feature/ Method Available
}
else
{
   // Feature/ Method Not Available
}
Run Code Online (Sandbox Code Playgroud)

注意:

不推荐使用的API并不意味着您不应该在当前版本中使用它.这意味着,从下一个版本开始它将无法工作,并且只能工作到当前版本.