malloc:mmap(size = XX)失败(错误代码= 12)

时间:2012-10-13 01:55:03

标签: ios4 memory-leaks nsbundle

我的iPhone应用程序存在内存问题,让我很难过。 这是我收到的错误消息:

  

malloc: * mmap(size = 9281536)失败(错误代码= 12)   * 错误:无法分配区域

我在这个应用程序中使用ARC,以防可能有用的信息。 代码(下面)只是使用Bundle中的文件来加载核心数据实体。

奇怪的是,崩溃只发生在90多个循环之后; 虽然看起来因为“内容”的大小越来越小,内存请求也应该越来越小。

以下是代码,如果有人能看到漏洞请告诉我。

NSString *path,*contents,*lineBuffer;
path=[[NSBundle mainBundle] pathForResource:@"myFileName" ofType:@"txt"];
contents=[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

int counter=0;

while (counter<10000) {
    lineBuffer=[contents substringToIndex:[contents rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]].location];
    contents=[contents substringFromIndex:[lineBuffer length]+1];
    newItem=[NSEntityDescription insertNewObjectForEntityForName:@"myEntityName"
                                                      inManagedObjectContext:context];
    [newItem setValue:lineBuffer forKey:@"name"];

    request=[[NSFetchRequest alloc] init];
    [request setEntity: [NSEntityDescription entityForName:@"myEntityName"
                         inManagedObjectContext:context]];
    error=nil;
    [context save:&error];

    counter++;
}

1 个答案:

答案 0 :(得分:1)

我终于使用NSMutableString而不是NSString解决了内容问题。 然后使用:[contents deleteCharactersInRange:range]; 当然,保持范围。 在循环中。