如何使代码兼容IOS 5和IOS 4 [iphone]

时间:2012-01-06 09:11:00

标签: iphone

我正在开展一个新项目。我希望我的代码兼容IOS4和IOS5 SDK。我需要在IOS4和IOS5中都能运行所有功能。也就是说,我不打算在IOS5中使用新功能(功能明智)并为IOS4禁用该功能。

我有两个选择。让我知道哪个最好?

  1. IOS4的目标和代码。我认为这也适用于IOS5。
  2. BaseSDK IOS5和目标IOS4。(我现在不计划使用ARC或故事板)。
  3. 我认为使用方法#2,在使用每个用法的同时我必须格外小心,因为我没有使用故事板和ARC,没有任何好处。所以希望#1更好。

    让我知道专家意见。

    注意:将来如果需要切换到IOS5的新功能,希望只有这个ARC会阻塞,这也是一个可选的东西,我可以轻松切换rt?

3 个答案:

答案 0 :(得分:5)

我使用此代码在多个iOS版本(3.0,4.0,5.0)上支持我的应用程序..

将其放在顶部(与导入一起)

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

然后如果有一些特定于操作系统的功能,请使用它们(我使用AlertView作为示例。在iOS5之前,UIAlertView不支持其中的自定义textView,因此我有自己的自定义AlertView。在iOS5中, hack不起作用,我必须使用UIAlertView,因为它支持自定义textViews):

if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {

    TextAlertView *alert = [[TextAlertView alloc] initWithTitle:@"xxxYYzz" 
                                                        message:@"" 
                                                       delegate:self cancelButtonTitle:@"Add"
                                              otherButtonTitles:@"Cancel", nil];
    alert.textField.keyboardType = UIKeyboardTypeDefault;
    alert.tag = 1;
    self.recipeNameTextField = alert.textField;
    [alert show];
    [alert release];
}
else {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"xxYYzz"
                                               message:@"" 
                                               delegate:self cancelButtonTitle:@"Add"
                                      otherButtonTitles:@"Cancel", nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
self.recipeNameTextField = [alert textFieldAtIndex:0];

[alert show];
[alert release];
}

希望有所帮助

答案 1 :(得分:1)

选择第一个。如果您正在为iOS4制作应用程序并且您没有使用iOS5中的任何新内容,那么请不要为自己制造更复杂的内容。

你想要使用第二个选项的唯一实时是你想要使用iOS5中的一些新功能,但你仍然希望它在iOS4上兼容,在这种情况下你必须进行条件检查您的程序当前正在运行的iOS版本。

顺便说一句,ARC无论如何都与iOS4兼容。

答案 2 :(得分:0)

在工作中,当我们需要向后兼容性时,我们会构建像Option 2这样的应用程序