Iphone 了解设备类型——视网膜/非视网膜

Iphone 了解设备类型——视网膜/非视网膜,iphone,objective-c,cocoa-touch,ios,Iphone,Objective C,Cocoa Touch,Ios,可能重复: 我们如何从objective C代码中知道设备是否有视网膜显示?您可以检查[UIScreen mainScreen]上的缩放属性,如果在视网膜上运行的是2.0,如果不是1.0。您还可以从当前CoreGraphics上下文中获取比例。我认为您无法直接确定。您必须根据可以从sysctlbyname返回的模型信息来推断它(请参见iOS手册页)。例如: if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] &

可能重复:


我们如何从objective C代码中知道设备是否有视网膜显示?

您可以检查
[UIScreen mainScreen]
上的
缩放属性,如果在视网膜上运行的是2.0,如果不是1.0。您还可以从当前CoreGraphics上下文中获取比例。

我认为您无法直接确定。您必须根据可以从sysctlbyname返回的模型信息来推断它(请参见iOS手册页)。例如:

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]
    && [[UIScreen mainScreen] scale] >= 2.0) {
    // Retina
} else {
    // Not Retina
}
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);

将返回一个字符串,如“iPhone3,1”有视网膜显示,或“iPhone2,1”没有视网膜显示。

为什么需要它?就像时区与视网膜显示有什么关系一样?如果用户在iOS<4上正确运行,应用程序将崩溃。这就是为什么要首先检查[[UIScreen mainScreen]respondsToSelector:@selector(scale)]是否为真。这是如何编写代码以确保向后兼容性的一般概念。这是一个糟糕的想法,根本不能证明未来的兼容性,甚至不能说明第四代iPodtouch也有视网膜显示器。其他答案中描述的
UIScreen
类的
scale
属性是正确的方法。这一点很好。我的观点是正确的。现在这应该是>=2.0(iPhone 6/6+)