gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:14:31 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com