例如,当像这样将 value
消息传递给 NSInteger
实例时
[a value]
它会导致 EXC_BAD_ACCESS。
那么如何将 NSInteger
转换为 int
?
如果相关,则仅使用 < 32 的小数字。
达达:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
只不过是一个 32/64 位整数。 (它将根据您运行的操作系统/平台使用适当的大小)
如果您想内联执行此操作,只需将 NSUInteger
或 NSInteger
强制转换为 int
:
int i = -1;
NSUInteger row = 100;
i > row // true, since the signed int is implicitly converted to an unsigned int
i > (int)row // false
NSInteger
值代替 int
,则会发生隐式转换。在这两种情况下,它都不是多线解决方案。
我不确定您需要将 NSInteger
转换为 int
的情况。
NSInteger 只是一个类型定义:
NSInteger 用于描述一个整数,与您是为 32 位还是 64 位系统构建无关。
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
您可以在任何使用 int
的地方使用 NSInteger
而无需转换它。
UIsegmentedControl中常用,在64位而不是32位编译时出现“错误”,不将其传递给新变量的简单方法是使用此提示,添加(int):
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
代替 :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];