2012-01-06 94 views
1

我正在一個新的項目。我希望我的代碼兼容IOS4和IOS5 SDK。我需要我的所有功能都可以在IOS4和IOS5中使用。也就是說,我不打算在IOS5中使用新功能(功能明智),並禁用IOS4的功能。如何使代碼兼容IOS 5和IOS 4 [iphone]

我有2個選項。讓我知道哪個最好?

  1. IOS4的目標和代碼。而且這也可以在IOS5中正常工作,我想。
  2. BaseSDK IOS5和目標IOS4(我現在不打算使用ARC或故事板)。

我覺得用方法#2,我必須特別小心,同時使用每個用法,因爲我不使用故事板和ARC,沒有任何好處。所以希望#1更好。

讓我知道專家意見。

注意:將來如果需要切換到IOS5的新功能,希望只有這個ARC將是阻塞,這也是一個可選的東西,我可以輕鬆切換rt?

回答

1

圍棋與第一個。如果你正在爲iOS4開發你的應用程序,並且你沒有使用iOS5的新功能,那麼不要讓自己變得更加複雜。

想要使用第二個選項的唯一實際時間是當您想要使用iOS5中的某些新功能,但您仍然希望它在iOS4上兼容時,在這種情況下,您必須進行有條件檢查對於您的程序當前正在運行的iOS版本。

順便說一句,ARC無論如何都與iOS4兼容。

0

在工作中我們建立我們的應用程序,如選擇2,當我們需要向後兼容性

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中,這種黑客行不通,我有使用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]; 
} 

希望它有幫助

+0

謝謝安舒。但這就是我的意思,關於開銷或特徵歧視,我不想要,因爲沒有爲單獨版本計劃的特殊功能。 – mia 2012-01-06 10:38:11