NSZone

NSZone到底是个什么东西?

可以想象成一个内存池,alloc或是dealloc这些操作,都是在这个内存池中操作的。

cocoa总是会配置一个默认的NSZone,任何默认的内存操作都是在这个“zone”上操作的。

NSZone是为了防止内存碎片化而引入的结构。

切入正题:

NSZone 是苹果对内存分配和释放的优化方式。NSZone不是一个对象;它是一个难懂的C结构,它被用于记录关于内存处理(管理)一系列对象的信息。NSZone是防止内存碎片化而引入的,可以对内存分配的区域本身进行多重化管理,根据使用对象的目的、对象的大小分配内存,从而提高了内存管理效率。

NSZone可以被视为一个内存池, alloc或是dealloc这些操作,都是在这个内存池中操作的。

使用NSZone,可以在给对象分配内存的时候,可以把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度。

如图:(摘自OC高级编程)

Cocoa透明地管理zone,默认的zone在程序启动和所有对象被分配时创建。

对于标准的(默认的)空间(NSZone),如果要分配的对象很多(比如几百个),那么在一直使用,经过多次释放对象后,必然会产生很多空隙。对于新的对象,分派内存时,分配器(allocator)会优先使用那些空隙,但是如果空隙比较多而且都比较小的话,那么就比较浪费时间了。这时,用户可以创建自己的空间(NSZone),并且告诉它不用去为了帮新对象分配内存而去查询那些空隙。现在,分配器每次都能够直接跳到内存分配的末尾去分配内存。

NSZone也能节省你释放内存的时间,它有方法释放大量分配的内存,而不打扰释放器(deallocators)。如果用一个集合(set)包含一系列对象,这样能够节省时间,你可以一次释放它们而不用去乏味地一个个释放它们。

你可能感兴趣的:(NSZone)