Iphone 从一系列URL下载和写入图像会使iPad崩溃
我在一个单独的线程中使用以下代码将图像写入我的应用程序目录Iphone 从一系列URL下载和写入图像会使iPad崩溃,iphone,objective-c,uiimage,saving-data,data-retrieval,Iphone,Objective C,Uiimage,Saving Data,Data Retrieval,我在一个单独的线程中使用以下代码将图像写入我的应用程序目录 for (int j =0; j<[sorted count]; j++) { NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[sorted objectAtIndex:j]]]; UIImage *image = [UIImage imageWithData:data]; if (image!=nil) {
for (int j =0; j<[sorted count]; j++) {
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[sorted objectAtIndex:j]]];
UIImage *image = [UIImage imageWithData:data];
if (image!=nil) {
NSLog(@"%@",[sorted objectAtIndex:j]);
[images addObject:image];
}
}
for(int j=0;j不确定是什么导致了您的问题,但是UIKit
不是线程安全的,因此这可能是原因。您可以尝试在主线程上执行代码,只是为了对其进行故障排除(并检查它是否正确),然后,如果我的猜测是正确的,请寻找解决方法
在寻找解决方法时,可能会有所帮助。您正在下载多少个图像,它们有多大?您是否尝试过一次下载并写入一个图像,以避免一次将它们全部塞进内存?这取决于xml。大约168个图像的总大小超过250 mb。就是这样。或者至少是一个有贡献的factor.您无法一次处理250mb。但是从主线程下载和保存会导致我的UI冻结,这是我启动单独线程的第一个原因。我只是建议一种解决代码故障的方法,而不会出现非多线程UIKit问题…作为一种解决方法,您可以在主线程上执行转换在(UIImageJPEGRepresentation
,UIImageWithData
)上,一旦您拥有了NSData
,在单独的线程中写入/读取文件。如果问题与UIKit多线程有关,那么我看不到其他方法。
for (int k=0;k<[images count];k++)
{
NSString *temp = [[sorted objectAtIndex:k]lastPathComponent];
NSString *imagePath = [dataPath stringByAppendingPathComponent:temp];
NSData *data = UIImageJPEGRepresentation([images objectAtIndex:k], 1.0f);
[data writeToFile:imagePath atomically:YES];
}