我尝试用 Objective C 编写一个程序来计算一些东西。不幸的是,要计算的东西很多,程序正在运行一个循环 10000 次迭代。总运行时间约为5分钟。这不是问题,但是当它运行时,程序使用的内存急剧增加(超过 2GB),我认为这是因为一些值没有释放。我将问题缩小到在循环内创建 NSArray。有问题的代码(将其更改为专注于问题)是这样的:
for (NSInteger k = 0; k<100000; k++) {
NSMutableArray *mutableTestArray = [NSMutableArray new];
for (NSInteger i=0; i<200; i++){
NSMutableArray *subArray = [NSMutableArray new];
for (NSInteger j=0; j<200; j++) {
//simplified version, normally the valus for sub array are dependent on some other factors
[subArray addObject:[NSArray arrayWithObjects:@"test", @"test", nil]];
}
[mutableTestArray addObject:subArray];
}
//do stuff with mutableTestArray
//change parameters that go into sub array
}
如果我更换:
[subArray addObject:[NSArray arrayWithObjects:@"test", @"test", nil]];
和:
[subArray addObject:@"test"];
它工作正常。所以我想我必须以某种方式释放我创建的数组。但是怎么做?我启用了 ARC,据我所知,如果启用它,我无法手动释放对象。如果有人可以帮助我更改代码或提示我可以学习如何正确进行内存管理的地方,那就太好了。
谢谢