您可以覆盖
alloc
allocWithZone:
就像其他类方法一样。它需要为实例分配内存并设置
isa
指针。像这样的方法会奏效:
void *memoryPool;
void *nextObject;
+ (id) alloc;
{
id result = (id)nextObject;
size_t instanceSize = class_getInstanceSize( self );
nextObject += instanceSize;
memset( result, 0, instanceSize );
result->isa = self;
return result;
}
+ (id) allocWithZone: (NSZone *) zone;
{
return nil;
}
- (void) dealloc; {Â /* do nothing */ }
memoryPool
nextObject
必须设置为相同的缓冲区。处理完这些对象后,可以通过释放
记忆工具
.
请注意,这还不是完美的。您可能应该跟踪每个分配对象的位置,以便可以调用它们
dealloc
方法在释放池之前。Dealloc无法释放对象使用的内存,但可能需要释放其他资源。
NSZone
具有
可能有助于提高分配速度,但无法同时释放区域内的所有对象。
但是,如果您确定对象分配是性能问题,那么您确实应该在分析之后执行此操作。他们往往不是。