NSInteger与NSInteger、int与无符号以及类似情况

有谁有专业知识来解释何时使用NSInteger和何时使用NSInteger

我见过Cocoa方法返回NSInteger,即使在返回值总是无符号的情况下也是如此

根本原因是什么?如果我们要表示负值,NSInteger或int是否严格限制为

从NSObjCRuntime.h:

#if uu LP64 uu124; | |(TARGET OS |嵌入式&!TARGET OS IPHONE)| | TARGET OS | uWin32 | NS | ubuild LIKE 64
typedef长NSInteger;
typedef无符号长整数;
#否则
typedef int NSInteger;
typedef无符号整数;
#恩迪夫

在处理NSInteger与NSInteger时,您还应了解整数转换规则:

例如,下面的片段返回0(false),尽管您希望它打印1(true):

NSInteger si=-1;
整数ui=1;
printf(“d\n”,si<ui);

原因是[si]变量被隐式转换为无符号整数

有关这些“问题”以及如何解决这些问题的深入讨论,请参见CERT的安全编码网站

发表评论