Чтобы ответить на этот вопрос в целом, среда выполнения Objective-C является полностью отражающей, что означает, что вы можете запросить, какие методы поддерживает объект (через respondsToSelector:
) и получить классы по имени во время выполнения (через NSClassFromString
),Двоичные файлы iOS также поддерживают концепцию слабой связи с фреймворками, что означает, что фреймворк будет загружен, если он доступен, но вы не считаете это фатальной ошибкой, если фреймворк недоступен (как поведение по умолчанию).
Это означает, что когда Apple выпускает новые версии ОС, вы можете написать код, который использует новые функции в последней версии ОС, но прекрасно работает без них, если эти новые функции являются новыми частями API.
Apple также иногда предоставляет новые функции SDK, которые не являются новыми API, например, когда в Xcode был добавлен статический анализатор Clang.Поскольку эти функции обычно не требуют поддержки во время выполнения, они полностью доступны для использования.iOS 5 немного уникальна, поскольку обязательства Apple по проекту LLVM позволяют предположить, что в ARC есть некоторые новые функции времени компиляции, которые полагаются на некоторую поддержку времени выполнения.Так что они будут недоступны, если действительно будут в инструментах, которые Apple намеревается распространять.