我正在寻找一些关于我的IOS应用程序中可能导致CPU问题的建议。
该应用程序将运行良好,然后一段时间后CPU将飙升并保持高位。我使用UICollectionView显示使用线程生成和编辑的水平缩略图。当我使用UICollectionView并滚动图像时,似乎会发生尖峰。
我已经发布了有问题的乐器截图,下面的代码是我用来编辑图像的。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *imageWithEffect = [self editImage:[[self.activeEffectsArray objectAtIndex:index] objectAtIndex:0] ImageToEdit:self.thumbnailImage];
dispatch_async(dispatch_get_main_queue(), ^{
[imageViewWithEffect setImage:imageWithEffect];
[activityIndicator removeFromSuperview];
[[self.activeEffectsArray objectAtIndex:index] insertObject:imageWithEffect atIndex:2];
});
});
- (UIImage *)editImage:(NSString *)effectName ImageToEdit:(UIImage *)tmpImage {
EffectBigApple *effectBigApple = [[EffectBigApple alloc] init];
if([effectName isEqualToString:@"BigApple 1"]){
return [effectBigApple processImage:tmpImage filterType:@"BigApple 1" sliderValue:1 type:nil];
}
if([effectName isEqualToString:@"BigApple 2"]){
return [effectBigApple processImage:tmpImage filterType:@"BigApple 2" sliderValue:1 type:nil];
}
if([effectName isEqualToString:@"BigApple 3"]){
return [effectBigApple processImage:tmpImage filterType:@"BigApple 3" sliderValue:1 type:nil];
}
if([effectName isEqualToString:@"BigApple 4"]){
return [effectBigApple processImage:tmpImage filterType:@"BigApple 4" sliderValue:1 type:nil];
}
return nil;
}
可能是造成它的另一部分代码,但我不确定?
答案 0 :(得分:3)
您没有提供足够的信息来帮助您。
通常,在将新的表视图/集合视图单元格滚动到视图中时,您希望避免任何“繁重的工作”。您需要一种方案,您可以在其中显示占位符图像,将处理排入后台队列,并在完成后更新结果。
同样重要的是,您希望缓存结果,以便只处理每个图像一次。如果用户向下滚动,然后向后滚动,您应该在图像缓存中找到已经处理过的图像并使用它们。内存中缓存速度最快,但即使将处理后的映像缓存到磁盘也可能会显着提高速度。
当你开始一堆后台处理时你的CPU使用率非常高是非常正常的,并不一定是个问题。您只需要确保后台处理不会使用户界面滞后。假设您有一个很好的系统,可以将图像处理排队到后台队列,并在准备好后将缓存显示处理后的图像,您可能需要将处理队列的优先级回拨到下一个较低优先级DISPATCH_QUEUE_PRIORITY_LOW。这将提高用户交互的偏好,并减慢图像处理速度。
如果我没记错的话,CPU会使用最大100 x的设备核心数量。因此,如果您使用的是2核iPhone 4s,则最大CPU为200。