为什么从未分配从 componentsSeparatedByString 分配的内存

Why is the memory allocated from componentsSeparatedByString never being allocated

我有一个 iOS 应用程序,它执行大量计算并使用标准 ARC 进行内存管理。在我 运行 几分钟后,它由于内存不足而崩溃。我检查了 Instruments,大部分内存都被调用 NSString 的 commentsSeparatedByString 的分配占用了。

我试过 运行在自动释放池中使用它,但这并没有多大帮助。由于在我的函数之外没有对该字符串的引用,我很困惑为什么内存没有被自动释放。我还有另一个函数,它与 commentsSeparatedByString.

有同样的问题

代码如下:

- (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

}
}

如果有人能告诉我为什么这里不能释放内存,请告诉我。

解决了问题,我以为我在使用 ARC 但我没有 (:

幸好这解决了我的记忆问题。

不好的是它要慢得多(慢 50-70%)。

我想这就是人们为 ARC 的魔力所必须付出的代价。