iOS 基础篇(一): char、int、long、NSInteger类型对比

1. 表格

类型 32位系统位宽 64位系统位宽 32位系统范围(十进制) 64位系统范围(十进制) 是否平台自适应 推荐使用场景
char 1字节 1字节 -128 ~ 127 (-2^7 ~ 2^7 - 1) -128 ~ 127 (-2^7 ~ 2^7 - 1) ❌ 固定大小 ASCII字符/小整数
signed char 1字节 1字节 -128 ~ 127 (-2^7 ~ 2^7 - 1) -128 ~ 127 (-2^7 ~ 2^7 - 1) ❌ 固定大小 明确有符号的小整数
unsigned char 1字节 1字节 0 ~ 255 (0 ~ 2^8 - 1) 0 ~ 255 (0 ~ 2^8 - 1) ❌ 固定大小 字节数据/无符号小整数
int 4字节 4字节 -2147483648 ~ 2147483647 (-2^31 ~ 2^31 - 1) 同32位系统范围 ❌ 固定大小 跨平台开发/C语言交互
long 4字节 8字节 -2147483648 ~ 2147483647 (-2^31 ~ 2^31 - 1) -9223372036854775808 ~ 9223372036854775807 (-2^63 ~ 2^63 - 1) ❌ 需手动处理 需要极大整数的场景
NSInteger 4字节 8字节 -2147483648 ~ 2147483647 (-2^31 ~ 2^31 - 1) -9223372036854775808 ~ 9223372036854775807 (-2^63 ~ 2^63 - 1) ✅ 自动适配 Cocoa API/iOS/macOS应用开发
NSUInteger 4字节 8字节 0 ~ 4294967295 (0 ~ 2^32 - 1) 0 ~ 18446744073709551615 (0 ~ 2^64 - 1) ✅ 自动适配 Cocoa API中的无符号整数

2. NSInteger / NSUInteger 源码 (编译时自动切换定义)

objectivec 复制代码
#if __LP64__ || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSUInteger;
#else
    typedef int NSInteger;
    typedef unsigned int NSUInteger;
#endif

3. NSInteger 类型可以提高可移植性的原因

在 Objective-C 开发中,优先使用 NSInteger 替代 intlong,以提高代码的可移植性。原因如下:

  1. 自动平台适配
    • 在32位系统上,NSInteger 被定义为 int(4字节)
    • 在64位系统上,NSInteger 被定义为 long(8字节)
    • 开发者无需编写条件编译代码即可适应不同架构。
  2. 数据完整性保障 :
    • 在64位系统上,当整数值超过32位范围(>2,147,483,647)时,使用 int 会导致数据截断。NSInteger 在64位下使用64位存储,可安全处理大整数,避免数据丢失。
  3. 无缝API集成与代码简化
    • API兼容性 :Cocoa/Cocoa Touch框架的方法参数和返回值(如数组的count、索引值)广泛使用NSInteger,直接使用该类型无需类型转换。
    • 减少条件编译:消除针对32/64位系统的条件判断代码,使代码更简洁。
    • 未来兼容 :若Apple引入新架构(如128位),只需调整NSInteger的底层定义,现有代码无需修改。
相关推荐
2501_915918412 小时前
TCP 抓包分析在复杂网络问题中的作用,从连接和数据流层面理解系统异常行为
网络·网络协议·tcp/ip·ios·小程序·uni-app·iphone
二流小码农3 小时前
鸿蒙开发:个人开发者如何使用华为账号登录
android·ios·harmonyos
wvy6 小时前
Xcode 26还没有适配SceneDelegate的app建议尽早适配
ios
游戏开发爱好者87 小时前
苹果 App 上架流程,结合 Xcode、CI 等常见工具
macos·ios·ci/cd·小程序·uni-app·iphone·xcode
前端老白7 小时前
webview在微信小程序中,安卓加载失败,IOS正常加载
android·ios·微信小程序·webview
2501_915106327 小时前
用 HBuilder 上架 iOS 应用时如何管理Bundle ID、证书与描述文件
android·ios·小程序·https·uni-app·iphone·webview
2501_915909067 小时前
资源文件混淆在 iOS 应用安全中的实际价值
android·安全·ios·小程序·uni-app·iphone·webview
2501_915918417 小时前
iOS App 性能测试中常被忽略的运行期问题
android·ios·小程序·https·uni-app·iphone·webview
Name_NaN_None8 小时前
iPhone怎么投屏到电脑上?
ios·电脑·iphone
sweet丶20 小时前
UIWindowScene 使用指南:掌握 iOS 多窗口架构
ios