iPhoneアプリにおいて、長らく、intとlongとNSIntegerは4バイトで同じサイズだった。iPhone5Sが登場し、64ビットCPUになったので、それぞれの型がどのように違うのか確認してみた。64ビット整数型を使う機会はあまり多くないかもしれないが、得点がインフレするゲームでは(約21億点 もしくは 43億点)32ビット環境と64ビット環境で動作が異なるので注意が必要だ。
int a = 1;
long b = 1;
NSInteger c = a;
NSLog(@"%lu %lu %lu", sizeof(a), sizeof(b), sizeof(c));
//32ビット環境 iPhone Retina(3.5inch)
2013-11-16 21:18:39.355 NSInteger[4024:70b] 4 4 4
//64ビット環境 iPhone Retina(4-inch 64bit)
2013-11-16 21:14:25.935 NSInteger[3962:70b] 4 8 8
long b = 1;
NSInteger c = a;
NSLog(@"%lu %lu %lu", sizeof(a), sizeof(b), sizeof(c));
//32ビット環境 iPhone Retina(3.5inch)
2013-11-16 21:18:39.355 NSInteger[4024:70b] 4 4 4
//64ビット環境 iPhone Retina(4-inch 64bit)
2013-11-16 21:14:25.935 NSInteger[3962:70b] 4 8 8