2010-09-11 99 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

相關問題