Memory Allocation and Zones(内存分配和区域概念)
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
在Objective-C中,内存分配可以指定一个特定的区域,这就是Zones
的概念。
当今,随着内存容量的增长和操作系统管理内存方法的提升,将对象分配到指定的内存区域中变得不那么重要了,然而,对于一些特点的情况,是有必要的。
比如,你希望提高程序运行的效率,你可以申请一大块内存,然后再单独分配给你需要的那些对象。
如果你知道你需要的对象的数量和每个对象需要内存空间的具体大小,你完全可以在内存中分配出一个区域(Zone
)来。当然Objective-C是这样这样操作的。
在Objective-C中,一块特定内存区域的基础结构称为Zone
,NSZone
。NSObject
的方法在处理内存分配时,都可以添加NSZone
这个参数来确定是在哪个区域中分配内存。例如:
+ (id) alloc;
+ (id) allocWithZone: (NSZone*)zone;
上面两个语句都用于给对象分配内存。但是,第一行语句是在缺省Zone
里分配内存。
当有必要把一组对象分配同一内存区域里面的时候,比如出于对性能的考虑,你可以通过NSCreateZone
函数建立一个区域将那些对象统一放进去。这样做的好处就是尽量让操作系统减少内存页的操作以提升运行速度。
不过通常情况下,我们只需要用第一行语句将对象分配到缺省的Zone里就可以了。
除了alloc
,还有一些NSObject的方法是可以完成内存分配的,比如有-copy
方法和-mutableCopy
方法。
实际上,95%的情况下,你根本不用考虑Zone
的问题,除非你非常注重程序的性能。所以绝大部分情况,你仅仅用alloc
方法而不用带任何参数就可以完成内存分配了。
在线练习
{$ activeFileHint $}