首先看看NSInteger的apple解釋:
typedef long NSInteger;
When building 32-bit applications, NSInteger is a 32-bit integer. A 64-bit application treats NSInteger as a 64-bit integer.
32程序:NSInteger相當于int32_t,4個字節(jié)為int的別名。
64位程序:NSInteger相當于int64_t,8個字節(jié)為long long的別名。
32位程序下幾種類型的字節(jié)數(shù):

32位類型字節(jié)數(shù)
64位下幾種類型的字節(jié)數(shù)

64位類型字節(jié)數(shù)
看到上邊的比較有什么問題嗎?
在64位中int64_t轉換成NSInteger正常,但是在32位中int64_t轉換成NSInteger會溢出。
在兼容32位和64位系統(tǒng)時,int和long long比NSInteger可靠地多。
因此在不考慮兼容32的時候:一般直接使用NSInteger就好了。
在考慮兼容的時候,使用int和long long就好了。
注釋:
int的范圍是-2147483648~2147483647。可以表示到10位數(shù),再大就不行了。
long long的范圍是-9223372036854775808~9223372036854775807??梢员硎镜?9位,已經很大了,一般夠用了。