小编典典

Objective-C 隐式转换将整数精度“NSUInteger”(又名“unsigned long”)丢失为“int”警告

all

我正在做一些练习,并收到一条警告,指出:

隐式转换失去整数精度:“NSUInteger”(又名“unsigned long”)到“int”

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSArray *myColors;

        int i;
        int count;

        myColors = @[@"Red", @"Green", @"Blue", @"Yellow"];

        count = myColors.count; //  <<< issue warning here

        for (i = 0; i < count; i++)

        NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]);
    }

    return 0;
}

截屏


阅读 91

收藏
2022-07-14

共1个答案

小编典典

在 64 位 OS X 平台上返回, 和的count方法NSArray``NSUInteger

  • NSUInteger定义为unsigned long,并且
  • unsigned long是一个 64 位无符号整数。
  • int是一个 32 位整数。

int一个比 更“小”的数据类型,因此NSUInteger是编译器警告。

另请参阅“基础数据类型参考”中的NSUInteger

在构建 32 位应用程序时,NSUInteger 是一个 32 位无符号整数。64 位应用程序将 NSUInteger 视为 64 位无符号整数。

要修复该编译器警告,您可以将局部count变量声明为

NSUInteger count;

或者(如果你确定你的数组永远不会包含超过2^31-1元素!),添加一个显式转换:

int count = (int)[myColors count];
2022-07-14