我一直在做一些测试,我的一个需求是从不同的 xml 文件中读取数据并将其堆叠在一个文件中。虽然我已经设法做到这一点,但该任务的内存消耗似乎相当大,iphone模拟器甚至没有发出内存警告,但我认为真正的 iPhone 不会容忍这一点(我没有一个在这里尝试的设备,所以我主要是从我读过的内容中推测)。
(主要部分)代码如下:
Boolean success = [fileManager createFileAtPath:documentsPath contents:nil attributes:nil];
[fileManager release];
if (success) {
NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:documentsPath];
for (int i = 0; i < 100; i++) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"mensagem_de_arquivo"
ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
GDataXMLDocument *xml = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
NSArray *tokens = [xml nodesForXPath:@"//message/data" error:nil];
if (tokens.count > 0) {
GDataXMLElement *token = (GDataXMLElement *)[tokens objectAtIndex:0];
[fileHandle writeData:[[token stringValue] dataUsingEncoding:NSASCIIStringEncoding]];
}
[xml release];
}
使用“构建和分析”命令没有给我任何泄漏或任何东西,并且代码在构建时不会发出警告,但内存消耗仍然在 50 到 70mb 之间(仅考虑实时字节,总体而言它几乎翻了一番)。
这个想法显然不是读取同一个文件的 100 次,但作为测试数据,它已经足够了,因为代码必须从 xml 文件中读取内容并按照接收顺序将它们发送到文件中。
有什么方法可以在分配新对象之前强制释放一些临时对象,我可以尝试重用一些变量吗?任何可以帮助我控制它的想法都非常受欢迎。
编辑- 只是为了让事情变得更有趣:最好保留一个解析器来读写,最好是坚持使用 GDataXML,或者,如果需要更改,使用 KissXML、TinyXML或 libxml - DOM,它们似乎都占用了更多内存,如此处所述,因此如果有一种方法可以强制释放内存,那将是最好的。
提前致谢 :)