方法返回对象时iPhone内存泄漏

时间:2010-11-14 08:36:23

标签: iphone objective-c object malloc return

我正在iOS 4上开发,我的appDelegate中有这个方法。它是从几个tableviews数据源代理调用的。仪器给了我这些(在设备和模拟器上) Malloc 512字节,Malloc 512字节,NSConcreteMapTable(基础)。 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 :(得分:0)

我刚刚使用this post中列出的方法解决了这个问题。

这是一种解决方法,但它确实有效。

另一方面,我发现如果你总是在设备上运行,而不是模拟器,那么仪器在Lion / Xcode 4.1中可靠运行。在模拟器上,似乎有一个时间的魔鬼附加到过程。