Objective c 使用预处理器检测iPhone5

Objective c 使用预处理器检测iPhone5,objective-c,ios,ios5,Objective C,Ios,Ios5,有没有办法将设备类型设为#define?我想把它作为一个通用应用,我想知道它是iPad、iPhone4还是iPhone5 谢谢 #定义IS#u宽屏(晶圆厂((双)[[UIScreen mainScreen]边界].size.height-(双)568)

有没有办法将设备类型设为#define?我想把它作为一个通用应用,我想知道它是iPad、iPhone4还是iPhone5

谢谢

#定义IS#u宽屏(晶圆厂((双)[[UIScreen mainScreen]边界].size.height-(双)568)#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_IPHONE ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone )
#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )
#define IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#定义为IPHONE(用户界面习惯用法()==UIUserInterfaceIdiomPhone) #定义IS_IPHONE_5(IS_IPHONE和IS_宽屏) #定义IPAD(用户界面习惯用法()==UIUserInterfaceIdiomPad)
#定义IS_宽屏(晶圆厂((双)[[UIScreen mainScreen]边界].size.height-(双)568)
反问题:

如果有可用的方法,为什么要使用宏?
宏以任何方式转换为方法调用,因为在编译时您无法知道在运行时将遇到什么设备

你正在运行的设备是iPad,如果上面写着:

BOOL isThisAnIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceIdiomPad;
除此之外,您还可以通过与视网膜图形常用的
@2x
相结合,自动获得正确的资源。

反问题:

如果有可用的方法,为什么要使用宏?
宏以任何方式转换为方法调用,因为在编译时您无法知道在运行时将遇到什么设备

你正在运行的设备是iPad,如果上面写着:

BOOL isThisAnIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIInterfaceIdiomPad;

除此之外,您还可以通过与视网膜图形常用的
@2x
相结合,自动获得正确的资源。

检查这个检查这个太棒了!谢谢你的快速回复,mientus!我一到家就去试试。你能解释一下为什么在运行前可以调用UIScreen和UIDevice吗?如何使用运行时生成的值定义预处理器?不要在那里比较字符串!如果它符合UIUserInterfaceIdiom的要求,那么它就是一部手机。@Device您可以选择在运行时或编译时进行测试。如果在编译时进行测试,那么就不会有任何有意义的通用应用程序。当然,这是有意义的。我想我只是展示了我真正的新手色彩。但请注意,在条件编译中不能使用
#if
中的颜色。它们也可以是普通的函数调用,因为这些值只在运行时可用。太棒了!谢谢你的快速回复,mientus!我一到家就去试试。你能解释一下为什么在运行前可以调用UIScreen和UIDevice吗?如何使用运行时生成的值定义预处理器?不要在那里比较字符串!如果它符合UIUserInterfaceIdiom的要求,那么它就是一部手机。@Device您可以选择在运行时或编译时进行测试。如果在编译时进行测试,那么就不会有任何有意义的通用应用程序。当然,这是有意义的。我想我只是展示了我真正的新手色彩。但请注意,在条件编译中不能使用
#if
中的颜色。它们也可以是普通的函数调用,因为这些值仅在运行时可用。