gpt4 book ai didi

objective-c - NSEnumerator 内存泄漏

转载 作者:行者123 更新时间:2023-12-03 16:55:38 25 4
gpt4 key购买 nike

由于我使用枚举器的方式,这会疯狂地泄漏。为什么?如果我不释放枚举器,它的泄漏会更加严重 - 我明白这一点..但我不明白为什么它仍然泄漏。

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here...
NSLog(@"Hello, World!");

// Create an array and fill it with important data! I'll need to enumerate this.
NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:300];

int i;
for(i = 0; i < 200; i++)
[myArray addObject:[NSNumber numberWithInt:i]];

while(1)
{
NSEnumerator *enumerator = [myArray objectEnumerator];
// Imagine some interesting code here
[enumerator release];
}

// More code that uses the array..

[pool drain];
return 0;
}

最佳答案

它本身不会泄漏 - 并且您不应该释放枚举器。

内存泄漏是指内存已分配但无法再释放(通常是因为您不再有指向它的指针)。在这种情况下,当自动释放池耗尽时,枚举器将被释放,但您正在阻止程序通过循环到达该行。这就是枚举器堆积的原因。如果将循环更改为:

while(1)
{
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
NSEnumerator *enumerator = [myArray objectEnumerator];
[innerPool drain];
}

您会发现内存消耗保持不变,因为枚举器将在每次迭代结束时正确释放。

关于objective-c - NSEnumerator 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com