2012-01-06 2 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

Go с первым. Если вы создаете приложение для 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 в качестве примера. Pre iOS5, UIAlertView не поддерживает пользовательский текстовый элемент внутри него, поэтому у меня был собственный пользовательский AlertView. В iOS5 этот хак не работает, и у меня есть использовать UIAlertView, поскольку он поддерживает пользовательские текстовые элементы):

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

Спасибо Anshu. Но это то, что я имел в виду из-за накладных расходов или дискриминации объектов, которые я не хочу, поскольку нет особых функций, запланированных для отдельных версий. – mia

Смежные вопросы