这是我在cellForRowAtIndex
中编写的下载图片的代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@autoreleasepool {
__block UIImage * img;
__block NSData *data;
if(![messageDocument.SmallImageURL isEqual:@""])
{
data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:messageDocument.SmallImageURL]];
img = [UIImage imageWithData:data];
}
dispatch_async(dispatch_get_main_queue(), ^{
imgUser.image = img;
img = nil;
imgUser.contentMode = UIViewContentModeScaleAspectFill;
CGSize size;
if(imgUser.image.size.width > imageFrame.size.width || imgUser.image.size.height > rectImage.size.height)
{
if(imgUser.image.size.width < imageFrame.size.width)
{
rectImage.size.width = imgUser.image.size.width;
}
if(imgUser.image.size.height < rectImage.size.height)
{
rectImage.size.height = imgUser.image.size.height;
}
size = CGSizeAspectFit(imgUser.image.size, rectImage.size);
imgUser.frame = CGRectMake(imgUser.frame.origin.x, rectImage.origin.y, size.width, size.height);
height = imgUser.frame.size.height;
}
else
{
imgUser.frame = CGRectMake(imageFrame.origin.x, imageFrame.origin.y, imgUser.image.size.width, imgUser.image.size.height);
height = imgUser.image.size.height;
}
CGPoint contentOffset = tableMessageDetail.contentOffset;
[tableMessageDetail beginUpdates];
[tableMessageDetail endUpdates];
[tableMessageDetail setContentOffset:contentOffset];
});
messageDocument.Pic = data;
data = nil;
if(messageDocument.Pic != nil)
{
Attachment *attachment = [Attachment new];
attachment.DocId = messageDocument.DocId;
attachment.DocURL = messageDocument.DocURL;
attachment.ImageId = messageDocument.ImageId;
attachment.MessageId = messageDocument.MessageId;
attachment.SmallImageURL = messageDocument.SmallImageURL;
attachment.OriginalFileName = messageDocument.OriginalFileName;
if([messageDocument.DocURL isEqual:@""])
{
NSArray *attachmentArray = [messageDocument.SmallImageURL componentsSeparatedByString:@"/"];
NSString *attachmentName = [attachmentArray objectAtIndex:attachmentArray.count - 1];
attachment.AttachmentName = attachmentName;
}
else
{
NSArray *attachmentArray = [messageDocument.DocURL componentsSeparatedByString:@"/"];
NSString *attachmentName = [attachmentArray objectAtIndex:attachmentArray.count - 1];
attachment.AttachmentName = attachmentName;
}
attachment.Pic = messageDocument.Pic;
[[CommonModel shared]CreateAttachment:attachment];
[[CommonModel shared]UpdateMessageDocumentPic:messageDocument];
attachment = nil;
}
}
});
但是如果有超过6张图片,我会在控制台上收到以下消息的内存异常:
来自调试器的消息:由于内存问题终止
@autoreleasepool
需要在for
循环内部。 - rmaddydispatch_async(dispatch_get_main_queue(), ^{ });
? - Nicolas Miari