2010-09-11 98 views
5

可能重复:
iPhone - How do I detect the iPhone version?如何以编程方式检测iphone 4

所以我看着这个线程: iPhone - How do I detect the iPhone version?

但它没有回答如何寻找另外,它看起来像丑陋的代码。也许有一个更简单的方法?

我也在寻找代码检测iphone 4。有任何想法吗? 谢谢!

+0

您可以查看链接在这里http://stackoverflow.com/questions/3177634/iphone-how-do-i-detect-the-iphone-version – Hiren 2012-07-17 10:31:29

回答

9

不检测模型,检测功能。例如,如果您从提供@ 2x图像以及普通大小图像的Web服务下载图像,则您现在知道该图像仅适用于iPhone4和iPod Touch 4,但是谁说那明天不会在iAmazingMagicThingy上工作?测试能力。

要使用上面的例子中,要测试的方法是:

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && 
    [[UIScreen mainScreen] scale] == 2.0) { 
    /* do your thing */ 
} 

我不会去和关于如何测试能力,但你真的想要做的用这种方式而不是测试一个特定的模型。

+0

为什么这是更好的一个例子:你的功能本来可以用于iPhone 4的,现在也将适用于新的iPod touch。 – 2010-09-11 05:47:50

+0

因为它在这篇文章中的做法是脆弱的,并且永远是一个追赶游戏。如果你知道你需要什么功能,寻找这些功能,并忽略他们的设备 - 考虑任何设备与他们能够运行该代码。考虑一下:所有飞翔的东西都有翅膀,但并非所有翅膀的东西都能飞翔。那么检查一下是否有翅膀并且它们能够支持飞行中的动物更有意义?或者获取你认识的所有鸟类的清单,并与之比较?最终,你可能会发现一个新物种,你的代码已经过时了。 – jer 2010-09-11 05:52:01

+0

你们是对的..但我在看http://www.iphonedevsdk.com/forum/iphone-sdk-development/45032-more-ipad-landscape-launch-issues.html,他们没有考虑iPhone 4,我想我应该重新思考如何做到这一点。也许只是睡觉(x)嘿。 – foreyez 2010-09-11 06:03:22

11

我不想在这里讨论,如果它更好地检测硬件模型或功能;我相信最好的事情取决于人们的特殊需要。 无论如何,如果你想测试的硬件模式,那么可以使用以下UNIX系统调用:

#include <sys/utsname.h> 

int uname(struct utsname *name); 

之一struct utsnamemachine成员,一个空值终止识别硬件(串有关其他成员的信息,请参阅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); 
} 
+0

加1为实际回答问题。有时候,了解实际的设备型号很有用。例如,在我的应用程序中,iPhone 4处理器速度很慢,所以我需要调整一些我的功能。 – Jeff 2013-06-22 07:40:02

相关问题