C语言中NSInteger,NSNumber以及Int的区别

NSInteger和NSNumber
 

首先:NSInteger,NSNumber并没有什么关系,更不要想当然的以为二者还有什么继承关系,甚至还有人问NSInteger是不是NSNumber的子类?答案当然是NO!!!NSInteger只是一个基本的数据类型,而NSNumber是OC的对象,并且NSNumber继承自NSValue,NSValue又继承自NSObject.

既然 NSInteger是基本类型,那么,使用起来就非常简单。 声明一个变量, NSInteger myInt; 直接赋值就可以了。 比如: myInt=8;

NSNumber 所拥有的类方法,如下:

+ (NSNumber*)numberWithChar: (char)value;

+ (NSNumber*)numberWithInt: (int)value;

+ (NSNumber*)numberWithFloat: (float)value;

+ (NSNumber*)numberWithBool: (BOOL) value;

NSNumber *myNumber,*floatnumber,*intNumber,*doublenumber,*charNumber;

myNumber = [NSNumber numberWithLong:0xabcdef];

floatnumber = [NSNumber numberWithFloat:12.34];

intNumber = [NSNumber numberWithInt:1000];

doublenumber = [NSNumber numberWithDouble:12345e+15];

charNumber = [NSNumber numberWithChar:'X'];

将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:

- (char)charValue;

- (int)intValue;

- (float)floatValue;

- (BOOL)boolValue;

- (NSString*)stringValue;

myInt = [intNumber intValue]; //获取对象的整型值

//[floatnumber floatValue];

//[doublenumber doubleValue];

//[charNumber charValue];

关于NSInteger 和Int:

查到c语言中,int和long的字节数是和操作系统指针所占位数相等。

但c语言中说,long的长度永远大于或等于int

objective-c里,苹果的官方文档中总是推荐用NSInteger

它和int有什么区别呢,stackoverflow这帮大神给了答案。

NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型。当你不知道你的操作系统是什么类型的时候,你通常会想要使用NSInteger,所以或许你想要你的int类型范围尽可能的大,用NSInteger,32位系统NSInteger是一个int,即32位,但当时64位系统时,NSInteger便是64位的。——所以就是一般推荐用NSInteger的

定义的代码类似于下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef long NSInteger;

typedef unsigned long NSUInteger;

#else

typedef int NSInteger;

typedef unsigned int NSUInteger;

#endif

You usually want to use NSInteger when you don't know what kind of processor architecture your code might run on, so you may for some reason want the largest possible int type, which on 32 bit systems is just an int, while on a 64-bit system it's a long.

总结:NSInteger与int的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)。

时间: 2024-09-30 19:45:17

C语言中NSInteger,NSNumber以及Int的区别的相关文章

c语言中return,和exit的区别

下面是自己的总结,有时候觉得还是自己基础不够,有句话说的好弯路是最好的捷径,自要自己多去尝试,程序这个东西当你哪儿不懂得时候就去尝试,当你不明白这个代码的执行流程时就添加打印,这样你就能够清晰看到函数流程和一些函数的用法. exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的.main函数结束时也会隐式地调用exit函数. exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流.关闭所有打开的流并且关闭通过标准I/O函数

C语言中fstat、stat和lstat 区别

在写应用程序的时候发现我们经常回去检测一个文件的大小,有了大小才能映射这个文件到内存上,方便我们直接操作. 在介绍三者的区别之前,首先介绍的是一个非常重要的结构体类型,名字叫做struct stat,这是一个保存文件状态信息的结构体,其类型如下: struct stat  {      dev_t     st_dev;     /* 文件所在设备的标识  */       ino_t     st_ino;     /* 文件结点号  */     mode_t    st_mode;    

C语言中define与const的用法区别分析

题目:  代码如下 复制代码 #define N 2 #define M N+1 #define NUM 2*M+1 main( ) { int i; for(i=1;i<=NUM;i++) printf("%dn",i); } 该程序中的for循环执行的次数是( ) A) 5 B) 6 C) 7 D) 8 答案是6,跑过以后怎么都不理解,这是因为忽略了#define的重大不同. #define进行的其实是简单的代入, 换句话说,NUM去找了M的表达式,把M的表达式代入,得出2*

请问c语言中,int a=0;变量名a和数值是怎么在内存分配的

问题描述 请问c语言中,int a=0;变量名a和数值是怎么在内存分配的 我看了很多答案,有些说只分配一个内存存0,a被隐藏了那么这个隐藏又是怎么个隐藏法呢还有说a和0同时存着不懂,求指教 解决方案 每次我们要使用某变量时都要事先这样声明它,它其实是内存中申请了一个名为i的整型变量宽度的空间(DOS下的16位编程中其宽度为2个字节),和一个名为a的字符型变量宽度的空间(占1个字节).i在内存起始地址为6上申请了两个字节的空间(我这里假设了int的宽度为16位,不同系统中int的宽度可能是不一样的

c++-C语言中 int n = xx; 与 int n; n = xx; 这两种定义方式有什么不同?

问题描述 C语言中 int n = xx; 与 int n; n = xx; 这两种定义方式有什么不同? C语言中 int n = xx; 与 int n; n = xx; 这两种定义方式有什么不同? 解决方案 对于int等简单变量,建议给初始值,这不消耗cpu执行,又能确保程序正确,何乐不为? 解决方案二: 第一种是定义int变量同时赋予该变量初值 第二种是定义变量后,再赋初值 解决方案三: 应该是没有运行上的不同. 解决方案四: 比如 int n = xx; int a[n]; 与 int

32位-c语言中 unsigned int i=3;printf(&amp;amp;quot;%u &amp;amp;quot;,i*-1);

问题描述 c语言中 unsigned int i=3;printf("%u ",i*-1); 在32位编译系统中,运行以下程序的结果是()#include main(){ unsigned int i=3; printf("%u ",i*-1); return 0;}A.3 B.-3 C.4294967293 D.运行出错===运行程序的结果选C答案,求大侠详细解释 解决方案 main() { int a[3][3],*p,i; p=&a[1][1]; fo

C语言中int型值的问题

在C语言中,int类型分为多种可变类型,包括:short int(占2个字节,值得范围为-32768-32767) ,unsigned short int(占两个字节.值得范围为0-65535),int(占四个字节,值得范围-2147783648-2147483647),unsigned int(占四个字节,值得范围为0-4294967265),long int(占四个字节,取值范围为-2147783648-2147483647),unsigned long int(占四个字节,取值范围为0-4

详解C语言中的char数据类型及其与int类型的转换_C 语言

C语言中的char变量 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed.虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器. 可通过下面程序判断编译器的默认char类型: void char_type() { char c=0xFF; if(c==-1) printf

c语言-C语言中的rand()函数的问题

问题描述 C语言中的rand()函数的问题 代码如下,为什么a总是输出0,而b却能正常输出?rand()的返回值不是在0~RAND_MAX之间的整数吗? #include <stdlib.h> #include int main (void) { int a; int b; int i; for (i=0;i<5;i++) { a=10*rand()/RAND_MAX; printf ("a=%dn",a); } for (i=0;i<5;i++) { b=10