前回同様、以下のようなコードで得ることができます。
注: 実機(3G/3GS/4)で試したところ、iPhone 4ではcpuFrequencyが0になってしまいました。(記事末尾に追記)
UIDevice+Hardware.h
#include <sys/sysctl.h>
@interface UIDevice (Hardware)
- (int) getSysInfo:(int)typeSpecifier;
- (int) cpuFrequency; // CPUのクロック周波数を得る
- (int) numCpus; // CPUのコア数を得る
- (int) totalMemory; // 実メモリサイズを得る
- (int) userMemory; // ユーザメモリサイズを得る
@end
UIDevice+Hardware.m
#import "UIDevice+Hardware.h"
@implementation UIDevice (Hardware)
- (int) getSysInfo:(int)typeSpecifier
{
size_t size = sizeof(int);
int result;
int mib[2] = {CTL_HW, typeSpecifier};
sysctl(mib, 2, &result, &size, NULL, 0);
return result;
}
- (int) cpuFrequency
{
return [self getSysInfo:HW_CPU_FREQ];
}
- (int) numCpus
{
return [self getSysInfo:HW_NCPU];
}
- (int) totalMemory
{
return [self getSysInfo:HW_PHYSMEM]; }
- (int) userMemory
{
return [self getSysInfo:HW_USERMEM];
}
@end
使い方の例
if ([[UIDevice currentDevice] cpuFrequency]
< 600 * 1000 * 1000) {
// CPUクロック周波数が600MHz未満の場合の処理
}
参考文献
erica/uidevice-extension - GitHub
https://github.com/erica/uidevice-extension
上記のWebページでは、erica氏は様々なUIDevice拡張機能を掲載されています。
ぜひご参照ください。
また、<sys/sysctl.h>を用いると他にも様々な値を参照できます。以下のサイトが便利です。
http://www013.upp.so-net.ne.jp/tanken/Tanken/no1_aboutSysCtl/kinouID.html
追記:
http://forums.macrumors.com/showthread.php?t=1080756
これを見て以下のようなコードを試してみましたが、やはりiPhone 4では0になりました。
size_t size; sysctlbyname("hw.cpufreqency", NULL, &size, NULL, 0); if (sizeof(long long) == size) { long long answer; sysctlbyname("hw.cpufreqency", &answer, &size, NULL, 0); NSLog(@"hw.cpufrequency: %qi", answer); }