可能重复:
iPhone - 如何检测iPhone版本?
所以我看了这个帖子: iPhone - 如何检测iPhone版本?
但它没有回答如何寻找iPhone 4。 而且,它似乎是丑陋的代码。也许有更简单的方法?
我还特别寻找在代码中检测iPhone 4的方法。有什么想法吗? 谢谢!
可能重复:
iPhone - 如何检测iPhone版本?
所以我看了这个帖子: iPhone - 如何检测iPhone版本?
但它没有回答如何寻找iPhone 4。 而且,它似乎是丑陋的代码。也许有更简单的方法?
我还特别寻找在代码中检测iPhone 4的方法。有什么想法吗? 谢谢!
我不想在这里讨论检测硬件型号或功能哪个更好;我认为最好的取决于一个人可能有的特定需求。无论如何,如果你想测试硬件型号,那么可以使用以下Unix系统调用:
#include <sys/utsname.h>
int uname(struct utsname *name);
struct utsname
结构体成员之一是machine
,一个以null结尾的字符串,用于标识硬件(关于其他成员的信息请参见man 3 uname);在iPhone 4的情况下,它将是“iPhone3,1”,在3GS中是“iPhone2,1”,在3G中是“iPhone1,2”,在第四代iPod Touch中是“iPod4,1”,第三代是“iPod3,1”,第二代是“iPod2,1”。
struct utsname platform;
int rc;
rc = uname(&platform);
if(rc == -1){
/* handle error */
}
else{
fprintf(stdout, "hardware platform: %s", platform.machine);
}
不要检测设备型号,而是检测功能。
例如,如果您从提供@2x图像和普通大小图像的Web服务下载图像,则知道目前仅适用于iPhone4和iPod Touch 4,但谁能说明天不会在iAmazingMagicThingy上工作?测试功能。
使用上面的示例,测试方法如下:
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] &&
[[UIScreen mainScreen] scale] == 2.0) {
/* do your thing */
}
我不打算详细讲解如何测试功能,但你真的应该以这种方式进行而不是测试特定模型。