Импортировать другой интерфейс в зависимости от версии iOS

Я создал класс CustomURLConnection.

Если моя версия iOS больше 5.0, то я хочу использовать

@interface CustomURLConnection : NSURLConnection<NSURLConnectionDataDelegate,NSURLConnectionDelegate>

или я хочу использовать

@interface CustomURLConnection : NSURLConnection 

Как бы я пошел об этом?

3 ответа

Решение

Вы можете сделать это, используя директивы препроцессора:

#ifdef __IPHONE_5_0 
//Put your ios 5 specific code here
#else
//Put your other code here
#endif

@interface является конструкцией времени компиляции, которая позволяет компилятору знать, что именованный символ является типом класса, и дает ему достаточно информации, чтобы генерировать предупреждающие сообщения надлежащим образом на основе того, что, по-видимому, неправильно используется классом другими участниками.

Так что вы ничего не можете сделать с @interface чтобы он выглядел по-разному в зависимости от того, на какой версии ОС запущено приложение. Что бы вы ожидали от него - распечатать все предупреждения компилятора, которые вы получили бы?

В мире Objective-C лучшим решением всегда является сборка на основе новейшего SDK, установка наименьшей версии iOS, для которой разработано приложение, в Info.plist и проверка во время выполнения (используя NSClassFromString, respondsToSelector:и т. д.) для любой функциональности, которая может отсутствовать в результате.

В вашем случае не должно быть абсолютно никаких проблем, если просто оставить там объявления протоколов и не подумать об этом дважды.

Вы создаете и продаете две отдельные версии приложения?

Директивы препроцессора имеют смысл, только если у вас есть несколько версий приложения, которые скомпилированы отдельно. Если у вас есть одно приложение, которое должно вести себя по-разному в зависимости от версии iOS пользователя, вам нужно будет сделать это с проверками во время выполнения.

Другие вопросы по тегам