【发布时间】:2013-01-27 12:58:15
【问题描述】:
我对我的分段表格视图有点绝望。我使用自定义 UITableViewCell 与 4 图像如下:
我尝试通过 SDWebImage 为每个单元格加载图像。
加载过程都在我的自定义 UITableViewCell 中完成 - 而不是在 UITableViewController 中。从cellForRowAtIndexPath 我只需调用[cell setup] 在当前单元格中执行以下代码:
NSArray *imageViews = [NSArray arrayWithObjects:self.imageView1, self.imageView2, self.imageView3, self.imageView4, nil];
for (int i = 0; i < self.products.count; i++) {
Product *currentProduct = [self.products objectAtIndex:i];
UIImageView *currentImageView = [imageViews objectAtIndex:i];
NSString *thumbURL = [[CommonCode getUnzippedDirectory] stringByAppendingPathComponent:currentProduct.collectionFolderName];
thumbURL = [thumbURL stringByAppendingPathComponent:thumbFolder];
thumbURL = [thumbURL stringByAppendingPathComponent:currentProduct.product_photo];
[currentImageView setContentMode:UIViewContentModeScaleAspectFit];
[currentImageView setImageWithURL:[NSURL fileURLWithPath:thumbURL]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
}
图像全部存储在文档目录中,并且不大于最大值。 500KB。
问题:
我的问题是,当我滚动浏览我的表格视图时,它突然崩溃了,我不知道为什么。为所有异常启用符号断点表明它由于 SDWebImage 中的一行而崩溃。不幸的是,没有调试器输出:(它在分配图像的地方崩溃)
UIImage *image = nil;
if ([imageOrData isKindOfClass:[NSData class]])
{
image = [[UIImage alloc] initWithData:(NSData *)imageOrData];
}
我还尝试通过dispatch_asnyc 加载图像,结果相似。 会不会和并发文件操作有关?
此外,当我快速滚动时,我会收到内存警告,因此我必须清除 SDWebImage 的缓存。同时停在上面提到的SDWebImage中的代码行。
我已经在网上搜索了 2 天,但没有找到有用的东西。我很高兴有一些提示可以解决这个问题。如果有人需要其他数据,例如崩溃报告或其他数据,请告诉我,我会尽快提供。
【问题讨论】:
-
您在使用 ARC 吗?当应用程序崩溃时,消息是什么(EXC_BAD_ACCESS、sig fault 等)?你试过启用僵尸吗?
-
是的,我正在使用 ARC。不幸的是,现在有消息。在应用程序崩溃之前,我的 TableViewController 中只收到了几个内存警告。此外,所有异常的符号断点表明 SDWebImage 中的这一行会造成麻烦(它说:线程 3:在断点 0 处停止)。当我使用异步队列而不是 SDWebImage 时也会发生同样的情况 - 当我想分配图像时会出现问题。
-
我认为分配图像时它停止的原因是内存不足。但是 SDWebImage 不应该处理这个吗?
-
我同意 Bins Ich 的观点,即应用程序占用了太多内存。即使图像文件大小为 500k(对于缩略图图像来说似乎很大),它在内存中的大小可能要大得多(内存中的大小 = 宽度 x 高度 x 字节/像素)。建议创建另一个版本的图像,并将其放在与图像视图相同大小的表格视图中作为测试。我怀疑你不会有同样的问题。
-
作为一个集合视图,你正在尝试做的事情让我印象深刻。您确定要使用分段表格视图吗? Apple 现在通过集合视图为此提供内置功能,以有效地管理出队、滚动等。
标签: ios asynchronous uitableview sdwebimage