我正在开展一个新项目。我希望我的代码兼容IOS4和IOS5 SDK。我需要在IOS4和IOS5中都能运行所有功能。也就是说,我不打算在IOS5中使用新功能(功能明智)并为IOS4禁用该功能。
我有两个选择。让我知道哪个最好?
我认为使用方法#2,在使用每个用法的同时我必须格外小心,因为我没有使用故事板和ARC,没有任何好处。所以希望#1更好。
让我知道专家意见。
注意:将来如果需要切换到IOS5的新功能,希望只有这个ARC会阻塞,这也是一个可选的东西,我可以轻松切换rt?
答案 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这样的应用程序