常用宏定义和设备的判断

来源:互联网 发布:数控仿真软件下载 编辑:程序博客网 时间:2024/06/13 17:05

一、设备判断

真机与模拟器判断:
    #if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
        NSLog(@" on simulator");
    #else
        NSLog(@"not on simulator");
    #endif
    注意:TARGET_OS_IPHONE在真机和模拟器上都是1


    设备类型判断方法有两种:
    1. UI_USER_INTERFACE_IDIOM() 进行区分(ios 3.2以上),但是无法区分iphoneipod
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            //设备为ipad
        } else {
            //设备为iphone  ipod
        }

或者

if([ [ UIDevice currentDevice ] userInterfaceIdiom ] == UIUserInterfaceIdiomPhone ){

    //IPhone设备

}else{

     //ipad设备

}
    2. 使用 UIDevice.model 进行区分  (ios 2.0 >=)
        NSString *deviceType = [UIDevice currentDevice].model;    
        if([deviceType isEqualToString:@"iPhone"]) {
              //iPhone
        }else if([deviceType isEqualToString:@"iPod touch"]) {
            //iPod Touch
        }else {
            //iPad
        }

或者

 if ([[UIDevice currentDevice].model rangeOfString:@"iPad"].location != NSNotFound) {

    NSLog(@"Thisis an iPad!");

}


不过网上有人说在使用第一种方法时发现,在Xcode4中,在项目的Summary页里必须将设备类型改为Universal才能生效。要不然就会一直返回为iPhone。所以,如果你的应用不需要设置成Universal,还是用第二种方法吧。



二、设备版本判断


1.

/*

 *  System Versioning Preprocessor Macros

 */

 

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)

#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

 

/*

 *  Usage

 */

 

if (SYSTEM_VERSION_LESS_THAN(@"4.0")) {

  

}

 

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) {

 

}


2.

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
// iOS 5 code
for(UITabBarItem *tabBarItem in self.tabBar.items)

{
[tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont systemFontOfSize:14.0], UITextAttributeFont, nil]
forState:UIControlStateNormal];
}
}
else {
// iOS 4.x code
;
}

3.

#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0 // 当前支持的sdk版本是否低于6.0

   //ios 6.0以下的处理

#else

  //ios 6.0以上的处理

 #endif


三、判断设备是否是iphone5,retina屏

  1. #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)  
  2. #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)  



四、常用宏定义(.h)

  1. #ifndef MacroDefinition_h  
  2. #define MacroDefinition_h  
  3.   
  4. //-------------------获取设备大小-------------------------  
  5. //NavBar高度  
  6. #define NavigationBar_HEIGHT 44  
  7. //获取屏幕 宽度、高度  
  8. #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)  
  9. #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
  10. //-------------------打印日志-------------------------  
  11. //DEBUG  模式下打印日志,当前行  
  12. #ifdef DEBUG  
  13. #   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);  
  14. #else  
  15. #   define DLog(...)  
  16. #endif
  17. //----------------------系统----------------------------  
  18. //获取系统版本
  19. #define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]  
  20. #define CurrentSystemVersion [[UIDevice currentDevice] systemVersion]  
  21.   
  22. //获取当前语言  
  23. #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])  
  24.   
  25. //判断是否 Retina屏、设备是否%fhone 5、是否是iPad  
  26. #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)  
  27. #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)  
  28. #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)  
  29.   
  30. //判断是真机还是模拟器  
  31. #if TARGET_OS_IPHONE  
  32. //iPhone Device  
  33. #endif  
  34.   
  35. #if TARGET_IPHONE_SIMULATOR  
  36. //iPhone Simulator  
  37. #endif  
  38.   
  39. //检查系统版本  
  40. #define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)  
  41. #define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)  
  42. #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)  
  43. #define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)  
  44. #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)  
  45.   
  46. //----------------------系统----------------------------  
  47. //使用ARC和不使用ARC  
  48. #if __has_feature(objc_arc)  
  49. //compiling with ARC  
  50. #else  
  51. //compiling without ARC  
  52. #endif  
  53. //释放对象
  54. #pragma mark - common functions  
  55. #define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
  56. //GCD  
  57. #define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)  
  58. #define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)
  59. //由角度获取弧度 有弧度获取角度  
  60. #define degreesToRadian(x) (M_PI * (x) / 180.0)  
  61. #define radianToDegrees(radian) (radian*180.0)/(M_PI)
  62. //单例化一个类  
  63. #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \  
  64. \  
  65. static classname *shared##classname = nil; \  
  66. \  
  67. + (classname *)shared##classname \  
  68. { \  
  69. @synchronized(self) \  
  70. { \  
  71. if (shared##classname == nil) \  
  72. { \  
  73. shared##classname = [[self alloc] init]; \  
  74. } \  
  75. } \  
  76. \  
  77. return shared##classname; \  
  78. } \  
  79. \  
  80. + (id)allocWithZone:(NSZone *)zone \  
  81. { \  
  82. @synchronized(self) \  
  83. { \  
  84. if (shared##classname == nil) \  
  85. { \  
  86. shared##classname = [super allocWithZone:zone]; \  
  87. return shared##classname; \  
  88. } \  
  89. } \  
  90. \  
  91. return nil; \  
  92. } \  
  93. \  
  94. 100. - (id)copyWithZone:(NSZone *)zone \  
  95. 101. { \  
  96. 102. return self; \  
  97. 103. }  
  98. 104. 
  99. 107. #endif

五、设备信息

获取设备相关信息
    //软件信息
    NSLog(@"sysname=%@",[[UIDevice currentDevice] systemName]);// 系统名
    NSLog(@"systemVersion=%@",[[UIDevice currentDevice] systemVersion]); //版本号
    NSLog(@"model=%@",[[UIDevice currentDevice] model]); //类型(ipadipodiphone)而[[UIDevice currentDevice] userInterfaceIdiom]只能判断iphoneipad
    NSLog(@"olduuid=%@",[[UIDevice currentDevice] uniqueIdentifier]); //唯一识别码 ios5.0开始deprecated
    NSLog(@"name=%@",[[UIDevice currentDevice] name]); //设备名称
    NSLog(@"localizedModel=%@",[[UIDevice currentDevice] localizedModel]); // 本地模式
    NSLog(@"ios6UUID=%@",[[[UIDevice currentDevice] identifierForVendor] UUIDString]);//ios6.0开始available
    
   ----------注:以下内容未测试
    // 硬件信息
    [UIDevice platform];//平台
    [UIDevice cpuFrequency]];//cpu信息
    UIDevice busFrequency]];//总线
    [UIDevice totalMemory]];//总内存
    UIDevice userMemory]];//已经使用的内存
    
    //App信息
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    CFShow(infoDictionary);//所有plist内容
    // app名称
    NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    // app版本
    NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    // app build版本
    NSString *app_build = [infoDictionary objectForKey:@"CFBundleVersion"];

    判断是否有照相机
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
        NSLog(@"");
    else
        NSLog(@"没有");

六、判断设备


#import "sys/utsname.h"


    struct utsname systemInfo;

    uname(&systemInfo);

    NSString *deviceString = [NSStringstringWithCString:systemInfo.machineencoding:NSUTF8StringEncoding];

    if ([deviceString isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";

    if ([deviceString isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";

    if ([deviceString isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";

    if ([deviceString isEqualToString:@"iPhone3,1"])    return @"iPhone 4";

    if ([deviceString isEqualToString:@"iPhone3,3"])   return@"Verizon iPhone 4";

    if ([deviceString isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";

    if ([deviceString isEqualToString:@"iPhone5,1"])   return@"iPhone 5 (GSM)";

    if ([deviceString isEqualToString:@"iPhone5,2"])   return@"iPhone 5 (GSM+CDMA)";

    if ([deviceString isEqualToString:@"iPhone5,3"])   return@"iPhone 5c (GSM)";

    if ([deviceString isEqualToString:@"iPhone5,4"])   return@"iPhone 5c (GSM+CDMA)";

    if ([deviceString isEqualToString:@"iPhone6,1"])   return@"iPhone 5s (GSM)";

    if ([deviceString isEqualToString:@"iPhone6,2"])   return@"iPhone 5s (GSM+CDMA)";

    if ([deviceStringisEqualToString:@"iPod1,1"])     return@"iPod Touch 1G";

    if ([deviceStringisEqualToString:@"iPod2,1"])     return@"iPod Touch 2G";

    if ([deviceStringisEqualToString:@"iPod3,1"])     return@"iPod Touch 3G";

    if ([deviceString isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";

    if ([deviceString isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";

    if ([deviceString isEqualToString:@"iPad1,1"])      return @"iPad";

    if ([deviceString isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";

    if ([deviceString isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";

    if ([deviceString isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";

    if ([deviceString isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";

    if ([deviceString isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";

    if ([deviceString isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";

    if ([deviceString isEqualToString:@"iPad2,7"])     return@"iPad Mini (GSM+CDMA)";

    if ([deviceString isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";

    if ([deviceString isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";

    if ([deviceString isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";

    if ([deviceString isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";

    if ([deviceString isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";

    if ([deviceString isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";

    if ([deviceString isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";

    if ([deviceString isEqualToString:@"iPad4,2"])     return@"iPad Air (Cellular)"

    if ([deviceString isEqualToString:@"i386"])         return @"Simulator";

    if ([deviceString isEqualToString:@"x86_64"])       return @"Simulator";



判断设备(.h)


  1. #import <Foundation/Foundation.h>  
  2.   
  3. #import <sys/utsname.h>  
  4.   
  5. @interface DeviceInfo : NSObject  
  6. +(NSString*)deviceString;  
  7. +(BOOL)isRetina;  
  8.   
  9. @end  
  10.   
  11.   
  12. //.m  
  13. #import "DeviceInfo.h"  
  14.   
  15. @implementation DeviceInfo  
  16.   
  17.   
  18. +(NSString*)deviceString  
  19.   
  20. {  
  21.       
  22.     struct utsname systemInfo;  
  23.       
  24.     uname(&systemInfo);  
  25.       
  26.     NSString *deviceString = [NSStringstringWithCString:systemInfo.machineencoding:NSUTF8StringEncoding];  
  27.       
  28.       
  29.       
  30.     if ([deviceString isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";  
  31.       
  32.     if ([deviceString isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";  
  33.       
  34.     if ([deviceString isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";  
  35.       
  36.     if ([deviceString isEqualToString:@"iPhone3,1"])    return @"iPhone 4";  
  37.       
  38.     if ([deviceString isEqualToString:@"iPhone3,2"])    return@"Verizon iPhone 4";  
  39.       
  40.     if ([deviceString isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";  
  41.       
  42.     if ([deviceString isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";  
  43.       
  44.     if ([deviceString isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";  
  45.       
  46.     if ([deviceString isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";  
  47.       
  48.     if ([deviceString isEqualToString:@"iPad1,1"])      return @"iPad";  
  49.       
  50.     if ([deviceString isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";  
  51.       
  52.     if ([deviceString isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";  
  53.       
  54.     if ([deviceString isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";  
  55.       
  56.     if ([deviceString isEqualToString:@"i386"])         return @"Simulator";  
  57.       
  58.     if ([deviceString isEqualToString:@"x86_64"])       return @"Simulator";  
  59.       
  60.       
  61.     return deviceString;  
  62.       
  63. }  
  64.   
  65. +(BOOL)isRetina  
  66.   
  67. {  
  68.       
  69.     struct utsname systemInfo;  
  70.       
  71.     uname(&systemInfo);  
  72.       
  73.     NSString *deviceString = [NSStringstringWithCString:systemInfo.machineencoding:NSUTF8StringEncoding];  
  74.       
  75.       
  76.       
  77.     if ([deviceString isEqualToString:@"iPhone1,1"])    return NO;  
  78.       
  79.     if ([deviceString isEqualToString:@"iPhone1,2"])    return NO;  
  80.       
  81.     if ([deviceString isEqualToString:@"iPhone2,1"])    return NO;  
  82.       
  83.     if ([deviceString isEqualToString:@"iPhone3,1"])    return YES;  
  84.       
  85.     if ([deviceString isEqualToString:@"iPhone3,2"])    return YES;  
  86.       
  87.     if ([deviceString isEqualToString:@"iPod1,1"])      return NO;  
  88.       
  89.     if ([deviceString isEqualToString:@"iPod2,1"])      return NO;  
  90.       
  91.     if ([deviceString isEqualToString:@"iPod3,1"])      return NO;  
  92.       
  93.     if ([deviceString isEqualToString:@"iPod4,1"])      return YES;  
  94.       
  95.     if ([deviceString isEqualToString:@"iPad1,1"])      return YES;  
  96.       
  97.     if ([deviceString isEqualToString:@"iPad2,1"])      return YES;  
  98.       
  99.     if ([deviceString isEqualToString:@"iPad2,2"])      return YES;  
  100.       
  101.     if ([deviceString isEqualToString:@"iPad2,3"])      return YES;  
  102.       
  103.     if ([deviceString isEqualToString:@"i386"])         return NO;  
  104.       
  105.     if ([deviceString isEqualToString:@"x86_64"])       return NO;  
  106.       
  107.     returnNO;  
  108. //    return deviceString;  
  109.       
  110. }  
  111. @end  
  112.   
  113.   
  114.   
  115.   
  116. + (NSString*)deviceString  
  117. {  
  118.     // 需要#import "sys/utsname.h"  
  119.     struct utsname systemInfo;  
  120.     uname(&systemInfo);  
  121.     NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];  
  122.        
  123.     if ([deviceString isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";  
  124.     if ([deviceString isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";  
  125.     if ([deviceString isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";  
  126.     if ([deviceString isEqualToString:@"iPhone3,1"])    return @"iPhone 4";  
  127.     if ([deviceString isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";  
  128.     if ([deviceString isEqualToString:@"iPhone5,2"])    return @"iPhone 5";  
  129.     if ([deviceString isEqualToString:@"iPhone3,2"])    return @"Verizon iPhone 4";  
  130.     if ([deviceString isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";  
  131.     if ([deviceString isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";  
  132.     if ([deviceString isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";  
  133.     if ([deviceString isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";  
  134.     if ([deviceString isEqualToString:@"iPad1,1"])      return @"iPad";  
  135.     if ([deviceString isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";  
  136.     if ([deviceString isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";  
  137.     if ([deviceString isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";  
  138.     if ([deviceString isEqualToString:@"i386"])         return @"Simulator";  
  139.     if ([deviceString isEqualToString:@"x86_64"])       return @"Simulator";  
  140.     NSLog(@"NOTE: Unknown device type: %@", deviceString);  
  141.     return deviceString;  
  142. }
0 0