獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊
今天和大家一起分享下如何獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊。相信各位發現通過蘋果官方開放的API想要獲取當前裝置以上的一些資訊似乎做不到。如今蘋果的硬體更新速度相當的快,還要在網上發現有有心人收集了所有已釋出蘋果裝置的相關裝置資訊,且不定期回去更新。詳情請見:Blake’s iOS Device Specifications Grid
筆者比較懶,於是就借用這位有心人的裝置資訊來幫助我們獲取iOS的以上的裝置資訊。下面我們就來看看程式碼。
首先我們為NSString新增一個Category,NSString+StringRegular。
//
// NSString+StringRegular.h
// HardwareInfo
//
// Created by pcjbird on 15/5/27.
// Copyright (c) 2015年 Zero Status. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (StringRegular)
-(NSMutableArray *)substringByRegular:(NSString *)regular;
@end
// // NSString+StringRegular.m // HardwareInfo // // Created by pcjbird on 15/5/27. // Copyright (c) 2015年 Zero Status. All rights reserved. //#import "NSString+StringRegular.h" @implementation NSString (StringRegular) -(NSMutableArray *)substringByRegular:(NSString *)regular{ NSString * reg=regular; NSRange r= [self rangeOfString:reg options:NSRegularExpressionSearch]; NSMutableArray *arr=[NSMutableArray array]; if (r.length != NSNotFound &&r.length != 0) { while (r.length != NSNotFound &&r.length != 0) { NSString* substr = [self substringWithRange:r]; [arr addObject:substr]; NSRange startr=NSMakeRange(r.location+r.length, [self length]-r.location-r.length); r=[self rangeOfString:reg options:NSRegularExpressionSearch range:startr]; } } return arr; } @end
接下來,我們來實現iOSHardwareInfoDataBase。
// // iOSHardwareInfoDataBase.h // HardwareInfo // // Created by pcjbird on 15/5/27. // Copyright (c) 2015年 Zero Status. All rights reserved. // #import <Foundation/Foundation.h> /********************************* Device, Model ID, Year, SoC, RAM (MB), Mem Speed (MHz), Mem Type, CPU, CPU Arch, Data Width, CPU Cores, CPU Clock (MHz), Geekbench Score, GPU, GPU Cores, GPU Clock (MHz), Screen Res, PPI, Screen Size (inches) *********************************/ @interface iOSHardwareInfoDataBase : NSObject + (iOSHardwareInfoDataBase *) sharedInstance; @property(nonatomic, readonly) BOOL isReady; -(NSDictionary *)currentDeviceInfo; @end
//
// iOSHardwareInfoDataBase.m
// HardwareInfo
//
// Created by pcjbird on 15/5/27.
// Copyright (c) 2015年 Zero Status. All rights reserved.
//
#import "iOSHardwareInfoDataBase.h"
#import "NSString+StringRegular.h"
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>
#define IOS_DEVICE_SPECIFICATIONS_GRID_URL @"http://www.blakespot.com/ios_device_specifications_grid.html"
@interface iOSHardwareInfoDataBase()
{
BOOL _isReady;
}
@property(nonatomic, strong) NSMutableDictionary* db;
@end
@implementation iOSHardwareInfoDataBase
@synthesize isReady = _isReady;
+ (iOSHardwareInfoDataBase *) sharedInstance
{
static iOSHardwareInfoDataBase* _sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (!_sharedInstance) {
if (!_sharedInstance) _sharedInstance=[[iOSHardwareInfoDataBase alloc] init];
}
});
return _sharedInstance;
}
-(id)init
{
if (self =[super init]) {
_isReady = FALSE;
self.db = [NSMutableDictionary dictionary];
dispatch_async(dispatch_get_global_queue(0, 0), ^(void){
[self TryParse];
});
}
return self;
}
-(NSString *)getMetaData
{
NSURL *url = [NSURL URLWithString:IOS_DEVICE_SPECIFICATIONS_GRID_URL];
NSData *data = [NSData dataWithContentsOfURL:url];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
-(void) TryParse
{
NSFileManager*fileManager =[NSFileManager defaultManager];
NSArray*paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString*documentsDirectory =[paths objectAtIndex:0];
NSString*path =[documentsDirectory stringByAppendingPathComponent:@"hardware"];
if([fileManager fileExistsAtPath:path])
{
NSData *jsonData = [[NSFileManager defaultManager] contentsAtPath:path];
NSDictionary * db= [jsonData toJSONObject];
[self.db addEntriesFromDictionary:db];
}
NSString *metaData = [self getMetaData];
if (!metaData)
{
_isReady = TRUE;
return;
}
NSRange rangeTable= [metaData rangeOfString:@"<table border=0 cellpadding=0 cellspacing=2>[\\s\\S]*</table>" options:NSRegularExpressionSearch];
if (rangeTable.length <=0)
{
_isReady = TRUE;
return;
}
[self.db removeAllObjects];
NSString* tableStr = [[metaData substringWithRange:rangeTable] stringByReplacingOccurrencesOfString:@" " withString:@""];
tableStr = [tableStr stringByReplacingOccurrencesOfString:@"<br>" withString:@" "];
tableStr = [tableStr stringByReplacingOccurrencesOfString:@"# " withString:@""];
NSMutableArray *infoArray=[tableStr substringByRegular:@"<tr[\\s\\S]*?>[\\s\\S]*?</tr>"];
NSString *titleStr = [infoArray firstObject];
NSMutableArray *titleArr = [titleStr substringByRegular:@"<td[\\s\\S]*?>[\\s\\S]*?</td>"];
for (NSUInteger i = 0; i < [titleArr count]; i++)
{
NSString *title = [titleArr objectAtIndex:i];
NSRange rangetd = [title rangeOfString:@"<td[\\s\\S]*?>" options:NSRegularExpressionSearch];
title = [title stringByReplacingCharactersInRange:rangetd withString:@""];
title = [title stringByReplacingOccurrencesOfString:@"</td>" withString:@" "];
[titleArr replaceObjectAtIndex:i withObject:title];
}
[infoArray removeObjectAtIndex:0];
[infoArray removeLastObject];
for (NSString *deviceInfo in infoArray)
{
NSMutableArray *devices = [deviceInfo substringByRegular:@"<td[\\s\\S]*?>[\\s\\S]*?</td>"];
for (NSUInteger i = 0; i < [devices count]; i++)
{
NSString *val = [devices objectAtIndex:i];
NSRange rangetd = [val rangeOfString:@"<td[\\s\\S]*?>" options:NSRegularExpressionSearch];
val = [val stringByReplacingCharactersInRange:rangetd withString:@""];
val = [val stringByReplacingOccurrencesOfString:@"</td>" withString:@" "];
[devices replaceObjectAtIndex:i withObject:val];
}
NSString *deviceKey = [devices objectAtIndex:1];
NSArray* keyArr = [[deviceKey stringByReplacingOccurrencesOfString:@" " withString:@""] componentsSeparatedByString:@"•"];
NSRange chRange = [[keyArr firstObject] rangeOfString:@"[\\D]*" options:NSRegularExpressionSearch];
NSString* chs = [[keyArr firstObject] substringWithRange:chRange];
for (NSString* _key in keyArr)
{
if (_key && [_key length] > 0)
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSUInteger j = 0; j < [titleArr count]; j++)
{
if (j != 1)
{
NSString *titleKey = [[titleArr objectAtIndex:j] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *deviceVal = [[devices objectAtIndex:j]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];;
[dict setObject:deviceVal forKey:titleKey];
}
}
NSString* dKey = _key;
if ([dKey rangeOfString:chs].length == 0) dKey = [chs stringByAppendingString:dKey];
[self.db setObject:dict forKey:dKey];
}
}
}
_isReady = TRUE;
NSData *newJsonData = [DataParseUtil toJSONData:self.db];
[newJsonData writeToFile:path atomically:YES];
}
- (NSString *) platform{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
free(machine);
return platform;
}
-(NSDictionary *)currentDeviceInfo
{
if (_isReady)
{
return [self.db objectForKey:[self platform]];
}
return nil;
}
@end
最後我們來寫下測試部分的程式碼。
//在程式啟動時呼叫以下程式碼 [iOSHardwareInfoDataBase sharedInstance]; //在需要獲取裝置資訊的地方呼叫以下程式碼 NSLog(@"current device info: %@", [[iOSHardwareInfoDataBase sharedInstance] currentDeviceInfo]);
希望這段分享對您有所幫助。
相關推薦
獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊
今天和大家一起分享下如何獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊。相信各位發現通過蘋果官方開放的API想要獲取當前裝置以上的一些資訊似乎做不到。如今蘋果的硬體更新速度相當的快,還要在網上發現有有心人收集了所有已釋出
IOS 獲取,如電量,CPU,型號等
#import <SystemConfiguration/CaptiveNetwork.h> NSString *ssid = @"Not Found"; NSString *macIp = @"Not Found"; CFArrayRef myArray =
iOS 實時獲取當前應用消耗的CPU和記憶體
https://www.cnblogs.com/mobilefeng/p/4977783.html 這一遍文章對獲取app 消耗的CPU和記憶體問題的多種方案做了對比,沒有實際去測試。 1 獲取應用消耗的CPU float cpu_usage() { kern_return
android UDID獲取:android 裝置SN的獲取 續 android 裝置唯一碼的獲取,Cpu號,Mac地址
http://blog.csdn.net/hpccn/article/details/7872141 這個方法使用中發現一些不完美的地方. -------------------------------------- 新的方法: 在使用命令列, adb device a
利用JNI方法,通過WMI獲取本地硬體資訊(主機板型號,硬碟序列號,CPU引數等)
因為有幾臺伺服器是windows 2000的,之前採用的WMIC方法不適用(windows 2003開始有),更不用說WMI .NET了(採用.NET Framework 3.5),只能採用JNI的方法,通過C++來呼叫本地WMI介面來查詢資料。幸好,這次WMI從windo
最新獲取iOS裝置型號大全(包括iphone7,iphone7 Plus)
獲取iOS裝置型號,找了一圈發現一般寫的都不夠全,自己完善了一下。 呼叫記得加上標頭檔案: #import <sys/utsname.h> + (NSString*)deviceSt
[iOS]獲取裝置具體型號資訊
本文地址; http://blog.csdn.net/zhaoyabei/article/details/46697859 應用統計中有時候需要上傳裝置型號,如果這樣寫: [[UIDevice currentDevice] model] 獲得的裝置型號不是具體型號,如在iPho
[專案實踐] 在專案實戰中提升程式碼效率的的一次應用實踐-----使用列表解析式輸出當前android裝置的CPU核數
1、先按照初學者思維程式碼應該是這樣的 1 #coding:utf-8 2 import os 3 text = os.popen("adb shell command cat /proc/cpuinfo",'r').read().split("\n") 4 i = 0 5 for j i
tensorflow獲取可用運算裝置(CPU,GPU)
Welcome To My Blog 正常來說,執行下面兩句會列印tensorflow能用的CPU和GPU from tensorflow.python.client import device_lib print(device_lib.list_local_devices())
linux檢視cpu型號,記憶體大小,磁碟空間的命令
轉自:http://www.jb51.net/article/97157.htm 1 檢視CPU 1.1 檢視CPU個數 #cat /proc/cpuinfo | grep “physical id” | uniq | wc -l 2 uniq命令:刪除重複行;wc –l命令
獲取當前電腦的cpu使用率、記憶體使用率
https://www.cnblogs.com/Chary/p/7771365.html http://www.cnblogs.com/zl1991/p/4679461.html 要關注幾個類 PerformanceCounter 用來針對cpu ;ComputerInfo 用來針對
Linux 檢視CPU資訊,機器型號,記憶體等資訊
系統 # uname -a # 檢視核心/作業系統/CPU資訊 # head -n 1 /etc/issue # 檢視作業系統版本 # cat /proc/cpuinfo # 檢視CPU資訊 # hostname
架構篇--系統監控--spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,系統異常郵件通知
架構篇–系統監控–spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,加工原生端點,系統異常郵件通知,ui介面spring-boot-admin2.0整合等等內容
iOS 獲取當前時間,並按照要求格式顯示
寫一個常用的獲取當前日期,時間的程式碼。並且能以規定的格式顯示出來 1 2 3 4 5 NSDate *currentDate = [NSDate date];//獲取當前時間,日期 N
C#獲取電腦的唯一標示UUID 非CPU型號 mac
在C# 裡面 有時候要用到獲取電腦問唯一標示 其他什麼獲取cpu mac地址 這些都是很大機會一樣的 通過我和同事的電腦進行測試 我的配件和他的配件一樣的 so 很多東西一樣 這裡獲取
iOS獲取手機型號、iOS獲取當前app的名稱和版本號
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // app名稱 NSString *app_Name = [infoDi
iOS裝置的CPU架構
模擬器: 4s-5: i386 5s-6s Plus: x86_64 真機(iOS裝置): 真機(iOS裝置): armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) arm
iOS 裝置CPU的架構
模擬器: 4s-5: i386 5s-6s Plus: x86_64 真機(iOS裝置): armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) armv7: iPhone 3Gs、iPh
IOS 獲取當前裝置IP地址
最近公司專案需要捕捉IOS裝置Ip,沒辦法,只能上網翻了翻相關資料。。以下就是捕捉IOS裝置IP的方法 #include <stdio.h> #include <stdlib.h> #include <string.h> #includ
iOS今天遇到一個問題,就是獲取當前時間的年 月
在網上搜索以後整理了一下,以備後續檢視- (NSString *)getDateYearMonth { NSDate *newDate = [NSDate date];NSCalendar *calendar = [NSCalendarcurrentCalendar];