Something to be aware of if you use an C-style array to store objects and you decide to use garbage collection is you'll need to allocate that memory with NSAllocateCollectable(sizeof(id)*size, NSScannedOption) and tag that variable as __strong.
This way the collector knows that it holds objects and will treat objects stored there as roots during that variables lifetime.