iPhoneは5Sから64bitになりましたが、64bit環境だとNSIntegerの値が異なります。
| 型 | 32bit | 64bit | 
|---|---|---|
| long | 4 | 8 | 
| size_t | 4 | 8 | 
| NSInteger | 4 | 8 | 
| CGFloat | 4 | 8 | 
このため、
NSInteger count=1;
NSLog(@”NSInteger count = %d”, count);といったプログラムを組むと、64bit環境で実行しようとすると
ViewController.m:122:86: Values of type ‘NSInteger’ should not be used as format arguments; add an explicit cast to ‘long’ insteadのようなエラーが出力され、%ldに訂正するようにXcodeに勧められます。
しかし、
NSInteger count=1;
NSLog(@”NSInteger count = %ld”, count);のように訂正すると、今度は32bit環境で実行した場合にエラーになります。
対策として、32bit/64bit両対応にするには、
NSInteger count=1;
NSLog(@”NSInteger count = %zd”, count);と「z」を付けると両対応できるようです。
