Утечка памяти в iPhone, когда метод возвращает объект - PullRequest
0 голосов
/ 14 ноября 2010

Я разрабатываю на iOS 4, и у меня есть этот метод в моем приложении Delegate. Он вызывается из пары делегатов источника данных tableviews. Инструменты дали мне это (на устройстве и симуляторе) Malloc 512 байт, Malloc 512 байт, NSConcreteMapTable (Foundation). Mallocs не показывают никакой ответственной библиотеки.

Вот метод, возвращающий объект:

- (NSXMLParser *) getXmlParserFrom:(NSString *)remoteFile andCacheToFile:(NSString *) fileName forceRefresh:(BOOL) doRefresh {  
    NSXMLParser *xmlParser;

    //FIRST TRY TO LOAD THE XML FROM CACHED FILE  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

    NSString *xmlDocumentFromCache = [[NSString alloc] initWithContentsOfFile:filePath];

    if ( xmlDocumentFromCache && !doRefresh ) {  
        NSData *xmlData = [NSData dataWithContentsOfFile:filePath];
        xmlParser = [[NSXMLParser alloc] initWithData:xmlData];
    }  else {  
        NSURL *xmlFileURL = [NSURL URLWithString:remoteFile];
        NSString *contentsOfRemoteFile = [NSString stringWithContentsOfURL:xmlFileURL];

        //CACHE THE FILE  
        BOOL cacheResult = [contentsOfRemoteFile writeToFile:filePath atomically:YES];
        xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlFileURL];
    }  
    [xmlDocumentFromCache release];

    return [xmlParser autorelease];
}

1 Ответ

0 голосов
/ 19 сентября 2011

Я только что исправил это, используя метод, описанный в этом посте .

Это обходной путь, но он работает.

С другой стороны, я обнаружил, что инструменты надежно работают в Lion / Xcode 4.1, если вы всегда запускаете его на устройстве, а не на симуляторе. На симуляторе кажется, что к процессу присоединяется дьявол времени.

...