модель процессора обнаружения iPhone / поддержка NEON - PullRequest
10 голосов
/ 21 октября 2009

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

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

  1. Способ определения модели процессора - я полагаю, что ее нет.
  2. Способ определения, поддерживаются ли неоновые инструкции ARM - из этого я мог бы получить ответ.
  3. Способ определения общего размера хранилища устройств - сочетание этого с уже известной моделью устройства может привести меня к ответу.

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

Ответы [ 4 ]

12 голосов
/ 21 октября 2009

Не совсем то, о чем вы просите, но одно простое решение - создать толстое приложение, чтобы оно содержало исполняемый код как для 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 может оказаться полезным для вас.

5 голосов
/ 21 октября 2009

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

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

1 голос
/ 06 апреля 2010

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

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

0 голосов
/ 15 ноября 2009

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

Для этого используйте доступныйMediaTypesForSourceType UIImagePickerController вместе с isSourceTypeAvailable для kUTTypeMovie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...