gpt4 book ai didi

ios - ImageView 导致尴尬的挂起?

转载 作者:行者123 更新时间:2023-11-29 03:55:33 26 4
gpt4 key购买 nike

我已经为此工作了几天(断断续续),但我确切不确定为什么这不起作用,所以我向 SOF 的专业人士询问以获得一些见解。

NewsItem.m

在我的第一个 View Controller 上,我正在读取包含 10 多个项目的 JSON 提要。每个项目都由一个 NewsItem View 表示,该 View 允许标题、正文和小图像。 UIImageView 有一个名为 imageViewIBOutlet。我正在异步加载 imageView 的图像。加载图像后,我将发送一个名为 IMAGE_LOADED 的通知。此通知仅在 NewsItemArticle

上获取
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//this will start the image loading in bg
dispatch_async(concurrentQueue, ^{
NSData *image = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageURL]];
//this will set the image when loading is finished
dispatch_async(dispatch_get_main_queue(), ^{
[self.imageView setAlpha:0.0];
self.image = [UIImage imageWithData:image];
[self.imageView setImage:self.image];
[UIView animateWithDuration:0.5 animations:^{
[self.imageView setAlpha:1.0];
}];

if(self)
[[NSNotificationCenter defaultCenter] postNotificationName:IMAGE_LOADED object:self];
});
});

NewsItemArticle.m

当用户点击 NewsItemView 时,我会加载一个新的 Controller ,它是 ScrollView 内多个 NewsItemArticle View 的 ScrollView 。 NewsItemArticle 将监听 IMAGE_LOADED,如果确定当前通知具有该特定文章的图像,它将使用相同的图像作为自己的引用,如下所示:

- (void)handleImageLoaded:(NSNotification *)note
{
if([note.object isEqual:self.cell]) {
// this next line is hanging the app. not sure why.
[self.imageView setImage:self.cell.image];
[self.activityViewIndicator removeFromSuperview];
}
}

本质上是:

  • 我在第一个图像引用上使用异步加载
  • 我使用通知让应用的其他部分知道图像已加载
  • 当现有图像引用第二个 UIImageView 时,应用会挂起

如果我注释掉可疑行,应用程序永远不会挂起。事实上,我的应用程序会挂起,直到加载所有图像。我的想法是:

  1. 这是网络线程冲突(不太可能)
  2. 这是 GPU 线程冲突(可能是在调整容器 View 大小期间?)

有人见过这样的事情吗?

最佳答案

对于 TableView 图像的延迟加载,几乎没有什么好的选择。可以在您的设计中使用它们来节省时间并避免重新发明轮子。
1.苹果延迟加载代码--link
2. SDWebImage -- link

SDWebImage 将为您提供一个完成处理程序/ block ,您可以在其中使用通知机制来通知应用程序的其他模块。

干杯!
阿马尔。

关于ios - ImageView 导致尴尬的挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16543943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com