前の記事ではiPhoneのモデルを得る方法を紹介しましたが、処理速度だけを問題とするならCPUのクロック周波数を得るのが近道です。

前回同様、以下のようなコードで得ることができます。

注: 実機(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);
	}