这个循环是存在内存泄漏:NSMutableArray的环路出现内存泄漏,甚至当我明确地释放它
int64_t i,verylongnumber;
//misc. code
for(i=0;i<verylongnumber;i++){
NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithLongLong:65535],
[NSNumber numberWithLongLong:65535],
[NSNumber numberWithLongLong:65535],
[NSNumber numberWithLongLong:65535],
nil];
[myArray removeAllObjects];
[myArray release];
}
我已经竭尽所能,以保持它的内存泄露,但我不能。我认为这与NSNumbers有关。我假设它们是自动发布的,但这是否意味着我必须单独释放它们(即使用alloc)?我怎么会这样做呢?为每个NSNumber创建一个单独的变量并将其插入到数组中?这似乎很多工作。我试过[myArray removeAllObjects],但这没有什么区别。它在我自己的线程中拥有自己的autorelease池。我不确定这是否有所作为。
这个固定:
我增加了一个额外的自动释放池,内环路:
int64_t i,verylongnumber;
//misc. code
for(i=0;i<verylongnumber;i++){
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithLongLong:65535],
[NSNumber numberWithLongLong:65535],
[NSNumber numberWithLongLong:65535],
[NSNumber numberWithLongLong:65535],
nil];
[myArray release];
[pool2 drain];
}
你可能想看看进入'@ autoreleasepool'声明,这既是ARC和MRC支持下,比NSAutoreleasePool更快(在ARC转换少了一个步骤,当你到这一点)。 –