You can think of an NSZone as a memory pool, where alloc or dealloc, things like that, are going to operate in. Cocoa always configates a default NSZone on which any default memory operations are performed. The drawback of the default NSZone is that it is globally scoped, and over time it will inevitably lead to fragmentation of memory. If you need to alloc a lot of objects, performance will suffer a bit. All of the methods that Cocoa provides, you can generate an NSZone yourself and restrict alloc copy to that “zone”.

CocaDev’s wiki: cocoadev.com/wiki/NSZone

NSZone is Apple’s way of allocating and freeing memory. Instead of being an object, NSZone uses a C structure to store information about the memory management of the object. Cocoa Application uses a default NSZone to manage Application objects. So at what point do you want to have an NSZone that you control? When the default NSZone manages a large number of objects. In this case, the release of a large number of objects can cause serious fragmentation of memory. Cocoa itself has been optimized to try to fill up memory each time it alloc, but doing so costs a lot of time. Therefore, you can create your own NSZone, so that when you have a large number of alloc requests, they are all transferred to the designated NSZone, reducing a lot of time overhead. Also, using NSZone allows you to clean up all of your zones in one go, saving a lot of time going through dealloc objects. In general, using NSZone can save some time when you need to create a large number of objects, but only if you know how to use it.

Another article from 2002 stated that developers could no longer create a true NSZone (perhaps for historical reasons), only one child zone within the Main Zone. Answer by Timothy J. Wood

Timothy also talked about how alloc multiple objects at the same time can reduce paging if NSZone can be used, and dealloc can reduce memory fragmentation at the same time. Apple has dealt with this, made it transparent to developers and didn’t have to do it themselves. Allocwithzones are not encouraged by Apple, and most of the time programmers don’t need to manage their own zones.