о целевой версии iOS и версии SDK - PullRequest
1 голос
/ 25 апреля 2011

iOS SDK обновляется, и появится некоторая новая технология, то есть блок - новая технология.

Итак, вопрос в том, можно ли распространять реализацию на основе блоков на более низкую целевую версию или более старый iPhone (3G или первое поколение)?

как справиться с этими проблемами?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

У вас должна быть слабая ссылка на libSystem.B.dylib, если вы используете блоки для iOS4 или новее.Поскольку блоки могут компилироваться с последним iOS SDK, но iOS2,3.0 и 3.1 не имеют времени выполнения блоков.

(Кроме того, вы можете использовать блоки для iPhone 2.2+. Пожалуйста, обратите внимание на plblocks .)

0 голосов
/ 25 апреля 2011

Обычный способ решения этой проблемы - выборочное включение функций во время выполнения в зависимости от текущей версии ОС. Однако это может быть очень сложным в управлении.

  • Запрос текущей версии ОС во время выполнения
  • Использовать слабые ссылки
  • Динамически создать класс
  • Вызывать новые функции, только если новый класс присутствует

Например:

Class optionalClass = NSClassFromString(@"NSArtificialIntelligence");
if (optionalClass) {
  id optionalObj = [[optionalClass alloc] init];
  // ... 
}

Следующая документация подробно описывает процесс:

Вы конкретно упоминаете блоки. Эта функция требует поддержки со стороны компилятора и среды выполнения Objective C, поэтому она не будет доступна вообще на старых системах.

...