Подтвердить что ты не робот

Модель обнаружения iPhone/поддержка NEON

Я ищу способ дифференцироваться во время работы между устройствами, оснащенными новым процессором ARM (например, iPhone 3GS и некоторыми iPods 3G), а также устройствами, оснащенными старыми процессорами ARM. Я знаю, что я могу использовать uname() для определения модели устройства, но, поскольку только некоторые из iPod касаются 3G, получили повышение в их процессоре ARM, этого недостаточно.

Поэтому я ищу один из них:

  • Способ обнаружения модели процессора - я полагаю, что нет.
  • Способ определения поддержки неоновых команд ARM - из этого я мог бы получить ответ.
  • Способ определения общего размера хранилища устройств - объединение этого с уже известной моделью устройства может привести к ошибке в использовании.
  • < ENTER RANDOM IDEA >

Заранее спасибо:)

4b9b3361

Ответ 1

Обходное решение, которое я могу придумать, определяет, доступен ли OpenGL ES 2.0, поскольку более новые процессоры позволяют это.

В статье на мобильном телефоне о том, как это сделать.

Ответ 2

Не совсем то, что вы просите, но одно простое решение состоит в том, чтобы построить ваше приложение, чтобы он содержал исполняемый код для ARMv6 и ARMv7. Если вы это сделаете, соответствующий код будет работать на процессоре автоматически, и вам не нужно выполнять проверку времени выполнения. Фактически вы позволяете загрузчику выполнять обнаружение времени выполнения для вас.

Для этого измените параметр "Архитектуры" в проекте XCode с "Стандартный (armv6)" на "Оптимизированный (armv6 armv7)"

Затем в вашей реализации вы выполните следующее:

#if defined __ARM_NEON__
    // Code that uses NEON goes here
#else  // defined __ARM_NEON__
    // Fallback code without NEON goes here
#endif // defined __ARM_NEON__

Существует аналогичный макрос, который вы можете использовать для проверки возможностей (не NEON) ARMv7, которые я не могу вспомнить с головы.

Если вы действительно хотите выполнить диспетчеризацию во время выполнения, посмотрите на sysctlbyname в libc. В частности, я думаю, что поиск параметра HW_MACHINE_ARCH может оказаться полезным для вас.

Ответ 3

EDIT: Я отозвал этот ответ, поскольку он оставил явное ядро, которое я понял позже: что делать, когда мы получаем неизвестный подтип на каком-то будущем оборудовании? ЭТО НЕ БУДУЩЕЕ - ДОВЕРИЕ. Кроме того, неопределенность документально подтвержденного статуса этого API не помогает, учитывая толерантность Apple к использованию недокументированных API.

Вы должны использовать ответ Стивена Канона и построить свой жир приложения. Надежное, надежное обнаружение во время выполнения в настоящее время невозможно (к моему ужасу, уверяю вас).

Ответ 4

Я знаю, что это крах, но самое лучшее, что приходит мне в голову, это определить, поддерживает ли устройство видеозапись. В настоящее время поддерживаются только устройства iPhone и iPod на базе ARM7, поэтому я думаю, что это законный способ.

Для этого используйте UIImagePickerController availableMediaTypesForSourceType в сочетании с isSourceTypeAvailable на kUTTypeMovie.