gpt4 book ai didi

ios - UIImage initWithData : blocking UI thread from async dispatch?

转载 作者:行者123 更新时间:2023-11-28 21:39:59 24 4
gpt4 key购买 nike

以下代码阻止了 UI(在图像加载完成之前无法点击另一个选项卡)。

我已经验证它是 UIImage *imageToShow = [[UIImage alloc] initWithData:data]; 调用是罪魁祸首,方法是将该行注释掉并保持下载(我知道这是异步发生的并在主线程上调用完成处理程序)。

在只有 initWithData: 行被注释的情况下,UI 响应没有问题。但是,如果在后台清楚地调度,那条线怎么会是支撑 UI 的线呢?

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
...

[objectStore getFileInContainer:@"public_images" filename:filename completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
UIImage *imageToShow = [[UIImage alloc] initWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
collectionImageView.image = imageToShow;
});
});
}];

...
}

最佳答案

UIImage 在第一次实际使用/绘制之前不会读取和解码图像。要强制此工作在后台线程上发生,您必须在执行主线程 -setImage: 调用之前在后台线程上使用/绘制图像。许多人发现这违反直觉。我在 another answer 中对此进行了相当详细的解释。 .

关于ios - UIImage initWithData : blocking UI thread from async dispatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32532927/

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