gpt4 book ai didi

ios - SDWebImage 线程占用 CPU

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:17 26 4
gpt4 key购买 nike

这是我的问题:

我有一个包含自定义 UITableViewCellUITableView。每个 UITableViewCell(称为 HomePicCell)都关联到一个 Pic 对象,该对象具有指向图像 URL 的属性。一旦显示我的单元格,我就开始使用 SDWebImage manager 下载此图像。

一切正常,但20 到 80 秒后,一些线程开始占用 CPU。该设备随后成为寒冷冬夜的完美暖手器,但我宁愿暂时跳过此功能!

我真的无法确定会导致此问题的原因。我不认为保留循环会成为问题,因为它只会占用内存。一个经过实验的意见真的很有帮助。

hogging threads

这是我的代码:

UITableView 数据源

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString* cellIdentifier = [@"HomePicCell" stringByAppendingString:[Theme sharedTheme].currentTheme];
HomePicCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (!cell) {
cell = [[HomePicCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}

if(self.pics.count>0){
Pic* pic = self.pics[indexPath.section];
[cell configureWithPic:pic];
}

return cell;
}

HomePicCell (configureWithPic:)

- (void)configureWithPic:(Pic*)pic
{
self.pic = pic;

// Reinit UI
[self.progressView setHidden:NO];
[self.errorLabel setHidden:YES];
[self.photoImageView setAlpha:0];
[self.progressView setProgress:0];

[self.pic downloadWithDelegate:self];
}

图片

- (void) downloadWithDelegate:(id<PicDownloadDelegate>)delegate
{
SDWebImageManager *manager = [SDWebImageManager sharedManager];

[manager downloadWithURL:self.url options:0 progress:^(NSUInteger receivedSize, long long expectedSize) {

if(expectedSize>0){
float progress = [@(receivedSize) floatValue]/[@(expectedSize) floatValue];
[delegate pic:self DownloadDidProgress:progress];
}

} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {

self.isGif = @(image.images.count>1);

if(image){
if(cacheType == SDImageCacheTypeNone){
[delegate pic:self DownloadDidFinish:image fromCache:NO];
}else{
[delegate pic:self DownloadDidFinish:image fromCache:YES];
}
}else{
[delegate pic:self DownloadFailWithError:error];
}

}];
}

HomePicCell(委托(delegate)方法)

- (void)pic:(Pic*)pic DownloadDidFinish:(UIImage *)image fromCache:(BOOL)fromCache
{
if(![pic isEqual:self.pic]){
return;
}

[self.progressView setHidden:YES];
self.photoImageView.image = image;
[self updateUI];
}

- (void)pic:(Pic*)pic DownloadFailWithError:(NSError *)error
{
if(![pic isEqual:self.pic]){
return;
}
[self.errorLabel setHidden:NO];
[self.progressView setHidden:YES];
}

- (void)pic:(Pic*)pic DownloadDidProgress:(float)progress
{
if(![pic isEqual:self.pic]){
return;
}
[self.progressView setProgress:progress+.01f];
}

谢谢!

最佳答案

问题显然已通过切换到 SDWebImage 3.0(而不是 3.3)得到解决。我将继续在项目 github 页面上声明一个问题,看看是否有人遇到过同样的问题。

关于ios - SDWebImage 线程占用 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188452/

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