目标C代码处理iPhone中的大量数据处理
我有下面的代码,它接收14MB或更多以base4字符串编码的图像数据,并在写入iphone中的文件之前将其转换为jpeg。它使我的程序崩溃,出现以下错误: 程序接收到信号:“0”。 警告:检查安全呼叫:无法还原当前帧 我调整了我的程序,它可以在错误再次出现之前处理更多的图像。我的编码如下: 我试着使用UIImageJPEGRepresentation,发现值越低,可以处理的图像越多,但这不应该是正确的方法。我想知道在处理每个图像后是否有任何方法可以立即释放imageStrList的内存,以便下一个图像可以使用它目标C代码处理iPhone中的大量数据处理,iphone,xcode,Iphone,Xcode,我有下面的代码,它接收14MB或更多以base4字符串编码的图像数据,并在写入iphone中的文件之前将其转换为jpeg。它使我的程序崩溃,出现以下错误: 程序接收到信号:“0”。 警告:检查安全呼叫:无法还原当前帧 我调整了我的程序,它可以在错误再次出现之前处理更多的图像。我的编码如下: 我试着使用UIImageJPEGRepresentation,发现值越低,可以处理的图像越多,但这不应该是正确的方法。我想知道在处理每个图像后是否有任何方法可以立即释放imageStrList的内存,以便下一
NSMutableArray *imageStrList = (NSMutableArray*) [parameters objectAtIndex:5];
while (imageStrList.count != 0) {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
NSString *imgString = [imageStrList objectAtIndex:0];
// Create a file name using my own Utility class
NSString *fileName = [Utility generateFileNName];
NSData *restoredImg = [NSData decodeWebSafeBase64ForString:imgString];
UIImage *img = [UIImage imageWithData: restoredImg];
NSData *imgJPEG = UIImageJPEGRepresentation(img, 0.4f);
[imgJPEG writeToFile:fileName atomically:YES];
[imageStrList removeObjectAtIndex:0];
[pool release];
}
您应该在循环内创建另一个autoreleasepool,因为在循环内创建的对象在程序退出循环之前不会被释放。
循环内的自动释放池将每次释放在循环内创建的所有对象
您应该在循环内创建另一个autoreleasepool,因为在循环内创建的对象在程序退出循环之前不会被释放。
循环内的自动释放池每次都会释放在循环内创建的所有对象。您的问题是
UIImage
s和NSData
s在循环内存中堆积。通常情况下,自动释放池会在事件循环结束时处理这个问题,但你不能让它走那么远。你有两个选择:
NSAutoreleasePool*myPool=[[NSAutoreleasePool alloc]init]代码>
[myPool发布]代码>
您的问题是
UIImage
s和NSData
s在内存中以循环方式堆积。通常情况下,自动释放池会在事件循环结束时处理这个问题,但你不能让它走那么远。你有两个选择:
NSAutoreleasePool*myPool=[[NSAutoreleasePool alloc]init]代码>
[myPool发布]代码>
NSMutableArray *imageStrList = (NSMutableArray*) [parameters objectAtIndex:5];
while (imageStrList.count != 0) {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
NSString *imgString = [imageStrList objectAtIndex:0];
// Create a file name using my own Utility class
NSString *fileName = [Utility generateFileNName];
NSData *restoredImg = [NSData decodeWebSafeBase64ForString:imgString];
UIImage *img = [UIImage imageWithData: restoredImg];
NSData *imgJPEG = UIImageJPEGRepresentation(img, 0.4f);
[imgJPEG writeToFile:fileName atomically:YES];
[imageStrList removeObjectAtIndex:0];
[pool release];
}