在为iOS开发时,什么时候应该使用NSInteger vs.int?我在Apple示例代码中看到,当将值作为参数传递给函数或从函数返回值时,他们使用NSInteger(或NSUInteger).

- (NSInteger)someFunc;...
- (void)someFuncWithInt:(NSInteger)value;...

但在一个函数中,他们只是用int来跟踪一个值

for (int i; i < something; i++)
...

int something;
something += somethingElseThatsAnInt;
...

我读到(有人告诉我)在64位或32位环境中,NSInteger是引用整数的安全方法,那么为什么要使用int呢?

推荐答案

当你不知道你的代码可能运行在什么样的处理器架构上时,你通常想要使用NSInteger,因此出于某种原因,你可能想要最大的整数类型,在32位系统上它只是int,而在64位系统上它是long.

除非您特别要求,否则我会坚持使用NSInteger,而不是int/long.

NSInteger/NSUInteger被定义为*dynamic typedef*s,它们的定义如下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

关于应该为这些类型中的每种类型使用的正确格式说明符,请参阅String Programming Guide's section on Platform Dependencies

Ios相关问答推荐

UIImageView 使用 CGAffineTransform 错误旋转

使用 RxDatasources 作为数据源时如何填充自定义页眉/页脚视图

iOS 部署目标“IPHONEOS_DEPLOYMENT_TARGET”设置为 8.0,在 Flutter 中如何更改最小 IOS 部署目标

App Store Connect 消息:您的帐户将很快需要迁移到联合身份验证

使用 Swift 5.1 编译的模块不能被 Swift 5.1.2 编译器导入

SwiftUI 无法在 HStack 的 Spacer 中点击

如何在模拟器 iOS 13 中使用暗模式?

检测表在 iOS 13 上被取消

是否可以在 iOS 13 上选择退出暗模式?

如何使用 SwiftUI 调整图像大小?

Xcode 10.2.1 命令 PhaseScriptExecution 失败,退出代码为非零

编译器无法对这个表达式 swift 4 进行类型判断?

6.5" 显示器的应用store 屏幕截图大小是多少?

滑动列表项以获取更多选项(Flutter)

获取文档文件夹中的文件列表

未安装分发证书/私钥

UIStackView 隐藏视图动画

光标外的 iOS 11 Safari bootstrap 模式文本区域

Xcode 9 的安全区域

如何将图像放在 UIButton 中文本的右侧?