iOS 一些基础补习

来源:互联网 发布:unity3d工程师面试题 编辑:程序博客网 时间:2024/04/28 06:20

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

有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?它们的功能当然是不同的。

NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:

NSArray *array= [[NSArray alloc]init];
[array addObject:3];//会编译错误

这样是会引发编译错误的,因为NSArray里面放的需要是一个类,但‘3’不是。这个时候需要用到NSNumber:

NSMutableArray *array= [[NSMutableArray alloc]init];
[array addObject:[NSNumber numberWithInt:3]];


 64位来源于电脑领域,它是一个“三位一体”的东西,它需要处理器、操作系统、应用软件都是64位,否则便无法实现64位计算。在电脑端,64位早已经不是个新生事物,早在1961年,IBM推出的IBM 7030 Stretch超级电脑就采用了64位数据字组,以及32或64位的指令字组。

 
iOS 32位和64位的区别

  一、 操作系统设计初衷不同

  64位操作系统的设计初衷是满足机械设计和分析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求,主要考虑的是运行一些比较特殊的行业性应用软件,而32位操作系统是为普通用户设计的,主要考虑的是运行日常的应用软件。

  二、处理器有所不同

  所谓64位处理器的“位数”,这个位数指的是CPU的GPRs(General-Purpose Registers通用寄存器)的数据宽度为64位,一次能够处理64bit的数据(32位是32bit),而寄存器是CPU中用来种暂时存放数据和地址的,是CPU构成的一部分。

  三、软件有所区别

  前面提到过,64位操作系统主要考虑是运行一些比较特殊的行业性应用软件,而这些软件都是采用64位计算,所以这些软件只能运行在64位操作系统下。32位应用软件主要是一些日常软件,但32位应用软件也可以兼容运行在64位操作系统下,不过这也是出于过渡上的考虑。

  而苹果此前曾多次向iOS开发者发出提醒,要求新提交的iOS应用都必须支持64位,这无疑表明了iOS将进入真正的64位时代。

  四、对内存的控制不同

  32位操作系统实际可识别的内存为3.5GB,而64位操作系统实际可支持128GB内存,这也是64位和32位在表面上以及实际价值上最主要的不同。

  iOS 32位和64位有什么不同,以上就是小编整理出来的一些32位和64位的区别,不清楚的可以参考着看看。


Objective-C内存管理机制 
Objective-C中的对象都是基于引用计数来管理生命周期的。简单来说就是,我们在需要持有一个对象时,调用retain让它的引用计数+1。不需要这个对象的时候,调用release让它的引用计数-1。当一个对象引用计数为0的时候,这个对象就会被自动销毁。

MRC
我们在手动管理引用计数的时候,要明确地控制对象的生命周期,显式的调用每一个retain和release。我们必须清楚的了解每个接口对引用计数的处理(如把一个对象放到数组里引用计数会被+1,用alloc创建的对象的引用计数一开始就是1,用哪些接口创建的对象是已经被调用过autorelease的等等)。在处理引用计数时稍有疏忽,就可能导致程序崩溃或内存泄漏。

ARC
ARC是编译器通过对代码的静态分析,确定对象的生命周期,并在合适的位置自动加上retain和release的机制。把内存管理交给编译器以后,我们不需要再调用任何的retain和release了。ARC减少了MRC带来的思考负担,减少了内存问题出现的可能性,也大幅减少了代码量。




0 0
原创粉丝点击