首先看看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个字节为int的别名。
64位程序:NSInteger相当于int64_t,8个字节为long long的别名。
32位程序下几种类型的字节数:
32位类型字节数
64位下几种类型的字节数
64位类型字节数
看到上边的比较有什么问题吗?
在64位中int64_t转换成NSInteger正常,但是在32位中int64_t转换成NSInteger会溢出。
在兼容32位和64位系统时,int和long long比NSInteger可靠地多。
因此在不考虑兼容32的时候:一般直接使用NSInteger就好了。
在考虑兼容的时候,使用int和long long就好了。
注释:
int的范围是-2147483648~2147483647。可以表示到10位数,再大就不行了。
long long的范围是-9223372036854775808~9223372036854775807。可以表示到19位,已经很大了,一般够用了。