Syn*_*tix 2 macos cocoa objective-c
这个循环泄漏内存:
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];
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切,以防止泄漏记忆,但我不能.我认为它与NSNumbers有关.我假设它们是自动释放的,但这是否意味着我必须单独释放它们(即使用alloc)?我怎么会这样做?为每个NSNumber创建一个单独的变量并将其插入到数组中?这似乎很多工作.我尝试了[myArray removeAllObjects],但这并没有什么区别.它在我自己的线程内有自己的自动释放池.我不确定这是否有所作为.
这解决了它:
我在循环中添加了一个额外的自动释放池:
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];
}
Run Code Online (Sandbox Code Playgroud)
我会捅这个......
您可以删除[myArray removeAllObjects],因为它是多余的.NSArray确实保留了它们的对象,但是当阵列本身被释放时它们也会释放它们.
NSNumbers本身是自动释放的.但是,如果你做一个非常大的循环,那么自动释放的内存实际上不会被释放,直到for循环退出并最终运行循环(除非你在某处设置了一个单独的NSAutoreleasePool).
所以我可以看到当循环迭代时内存使用量会如何增加,但是在完成时它应该释放内存.你是怎么得出你有泄漏的结论的?
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |