【发布时间】:2015-03-13 17:01:13
【问题描述】:
我有一个 iOS 应用程序,它进行大量计算并使用标准 ARC 进行内存管理。在我运行它几分钟后,它由于内存不足而崩溃。我检查了 Instruments,大部分内存都被调用 NSString 的 cmetsSeparatedByString 的分配占用了。
我尝试在自动释放池中运行它,但这并没有太大帮助。由于在我的函数之外没有对该字符串的引用,我很困惑为什么没有自动释放内存。我还有另一个与 cmetsSeparatedByString 有相同问题的函数。
代码如下:
- (void) processWorkWithExtraData:(NSData *) extraData
{
@autoreleasepool {
NSString *string = [[NSString alloc] initWithData:extraData encoding:NSUTF8StringEncoding];
NSArray *dataArray = [string componentsSeparatedByString:@","]; // eats up memory like crazy!!!
NSMutableArray *objectArray = [[NSMutableArray alloc] init];
for (int i=0;i<[dataArray count];i += 1)
{
TestObject *p = [[TestObject alloc] initWithFloat:[[dataArray objectAtIndex:i] floatValue]];
[objectArray addObject:p];
}
[self processArray: objectArray]; // just performs math computations on the floats in the objects
}
}
如果有人可以让我知道为什么这里不会释放内存,请告诉我。
【问题讨论】:
标签: ios objective-c memory-management automatic-ref-counting