ios - 为什么NSInteger在32位iOS上没有定义为long?

标签 ios objective-c

NSInteger是这样定义的:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

这导致NSInteger在32位iOS上定义为int,即使int和long仍然相同(均为4个字节)。如下所示的格式字符串会使用此定义生成警告:
NSInteger x = 4;
[NSString stringWithFormat: @"%ld", x];

// Warning: Values of type 'NSInteger' should not be used as format arguments;
// add an explicit cast to 'long' instead.

那么有人知道为什么NSInteger并不总是定义得那么长吗?

最佳答案

出于历史原因,以前的API版本使用了int,随后又被迁移为使用typedef NSIntegerca。 OS X的64位过渡。

我想它们可能会为iOS更改,但是如果OS X和iOS上的代码不同,那么这将影响许多现有和待开发的代码。

关于ios - 为什么NSInteger在32位iOS上没有定义为long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23777504/

相关文章:

ios - 如何在ios13中禁用pdfkits pdfview中的查找、共享、转发菜单项

iOS 删除 xib 中的 UITableViewCell 内部边距

ios - Objective C 整数数组

ios - IOS 教程中的 UnwindToList 未激活

ios - 无法推送到 XIB iOS

iphone - 人们如何在 iPhoneOS 中完成照片滤镜?

ios - 根据得分决定球队排名的不同结果

ios - #selector 函数被意外调用

ios - iOS 版本 13 中的照片库插件崩溃

ios - Swift:在 if 语句中设置自定义 UITableViewCell 类