С gcc в соответствии с Linux можно использовать --wrap
флаг компоновщика как это:
gcc program.c -Wl,-wrap,getObjectName -o program
и определяют Вашу функцию как:
const char *__wrap_getObjectName (object *anObject)
{
if (anObject == NULL)
return "(null)";
else
return __real_getObjectName( anObject ); // call the real function
}
Это гарантирует, что все вызовы к getObjectName()
перенаправлены к Вашей функции обертки (во время ссылки). Этот очень полезный флаг однако отсутствует в gcc в соответствии с Mac OS X.
Не забывают объявлять функцию обертки с extern "C"
, если Вы компилируете с g ++ все же.
В прошлой истории программирования для Mac это всегда считалось неправильным вопросом.
Что вам действительно нужно знать, так это более конкретная информация. Задайте гораздо более узкий вопрос для каждого поведенческого решения в вашем коде. Например, вам может потребоваться узнать, есть ли на устройстве GPS. Другой заключается в том, что вам не следует решать, как использовать стек OpenGL, исходя из того, какая это модель устройства, а, скорее, исходя из предоставленной информации о возможностях / расширениях OpenGL.
Информация, которую вы получаете сейчас, взята из UIDevice, который К сожалению, это плохо спроектированный API. Он предоставляет вам совершенно неправильную информацию в худшем из возможных форматов - строках.
У Эрики Садун есть расширение для UIDevice, которое может быть полезно здесь . Это просто оболочка для sysctlbyname ("hw.machine", ...)
. Это свойство отличается для каждой модели.
Но опять же, обычно это неправильный вопрос.