我正在寻找有关如何改进使用 base64 编码解码 40+MB NSString 并将其保存到文件的过程的想法,同时能够将该过程适应 iPad 1 的 256 MB RAM
我从 NSXMLParser 得到 NSString:
id pointerToString;
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"myElement"])
{
pointerToString = [string retain];
}
}
然后我在回调中使用pointerToString:
[handler performSelector: action withObject: pointerToString];
在回调中(id 值是 pointerToString)。我用pointerToString初始化NSData,同时用base64编码解码它。
^(id value)
{
if ( [[value class] isSubclassOfClass:[NSString class]] )
{
NSData *data = [NSData dataFromBase64String:value];
[data writeToFile:file.path atomically:YES];
}
}
在 NSData 调用之后或期间,当内存分配达到大约 130MB 时,iPad 1 设备内存不足并被 iOS 杀死。
我已经确定,为了以这种方式处理 40+MB 的 NSString,我需要大约 180+MB 的 RAM(这是 iPad 2 和 3 上的最大内存分配,由于更多的 RAM,该过程有效)
任何想法/提示?
谢谢