2010-08-14 50 views
2

是否有任何方式在運行時對iPhone設備執行運行時檢查? 它必須能夠區分iPhone 4與其他iPhone/iPod touch型號。 任何可以做同樣事情的解決方法也可以。在運行時確定iPhone設備

+2

可能重複[iPhone - 我如何檢測iPhone版本?](http://stackoverflow.com/questions/3177634/iphone-how-do-i-detect-the-iphone-version) – Tim 2010-08-14 14:43:53

回答

4

我用一些像這樣的代碼,爲了同樣的目的:

if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    return [[UIScreen mainScreen] scale] == 2.0 ? YES : NO; 
return NO; 

僅限iOS 4.x版+設備支持UIScreen scale實例方法。而且由於iPhone4不運行iOS 3,我們可以立即排除這些問題。接下來,我們檢查比例因子是否爲2.0,如果是的話,我們知道它具有視網膜顯示。儘管這不是明確的(蘋果明天可能會發布另一個視網膜設備),但它確實在重要的地方測試了「模型」 - 也就是說,您可以從提供@ 2x圖像和標準圖像的Web服務中提取圖像,這就是我正在做的,這意味着您需要手動編寫縮放圖像支持,您不會像UIImage的-imageNamed:那樣免費獲得本地文件。

+0

謝謝!那正是我需要的。 – tadejsv 2010-08-14 15:00:50

0

你可以通過的UIDevice類的準確型號:

[[UIDevice currentDevice] model] 

這,和一些其他的方法記錄在這裏:http://developer.apple.com/iphone/library/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

要小心,不過,不要混淆與iOS版本的硬件模型。如果您想爲支持它們的設備提供額外的/不同的功能,最好使用respondsToSelector:方法或NSClassFromString函數來檢查特定接口是否可用。

但是,使用NSClassFromString函數時要小心,因爲有些類作爲早期SDK中的私有API的一部分存在:具有完全不同的接口。

+0

我翻看了一下,它只在iPod和iPhone之間區別,而不是在不同版本的iPhone之間。 – tadejsv 2010-08-15 07:42:55