Импортировать другой интерфейс в зависимости от версии 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 пользователя, вам нужно будет сделать это с проверками во время выполнения.