SAH*_*AHM 4 64-bit types type-conversion nsnumber ios
根据我对NSNumber的理解,如果使用某种数据类型创建NSNumber,则需要使用相同的数据类型访问该变量.例如
NSNumber *myIntNumber = [NSNumber numberWithInt:1];
int myInt = [myIntNumber intValue];
NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:1];
NSInteger myInteger = [myIntNumber integerValue];
Run Code Online (Sandbox Code Playgroud)
如果使用#define变量创建NSNumber:
#define MY_DEFINE 6
Run Code Online (Sandbox Code Playgroud)
这是否意味着我无法做到以下几点
NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:MY_DEFINE];
NSInteger myInteger = [myIntNumber integerValue];
Run Code Online (Sandbox Code Playgroud)
因为MY_DEFINE不是NSInteger?
我知道上面的代码可以在32位应用程序中运行,但我正在努力确保它可以在64位应用程序上运行,这对于这些事情也更加挑剔.当然,做正确的事情永远不会伤害.
如果我不能做到这一点,我应该尝试不同地定义MY_DEFINE,以便我可以使用它来创建一个NSNumber,以后可以用来检索NSInteger?
你的理解NSNumber是不正确的.您可以NSNumber使用它支持的任何类型创建一个,然后您可以使用任何支持的类型访问器.两者不需要相同.
// Perfectly valid
NSNumber *number = [NSNumber numberWithFloat:3.14];
int val = [number intValue]; // results in 3
Run Code Online (Sandbox Code Playgroud)
您使用它#define是完全有效的.预编译器只是将您的代码转换为:
NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:6];
Run Code Online (Sandbox Code Playgroud)
请记住,a #define只不过是在编译代码之前完成的简单复制和粘贴(至少在这种简单形式中).
你甚至可以使用现代语法:
NSNumber *number = @MY_DEFINE;
Run Code Online (Sandbox Code Playgroud)
变为:
NSNumber *number = @6;
Run Code Online (Sandbox Code Playgroud)
BTW - 为什么发布这个问题?为什么不先试试呢?
| 归档时间: |
|
| 查看次数: |
4066 次 |
| 最近记录: |