【发布时间】:2014-07-11 11:10:27
【问题描述】:
这就是我使用UIImage+Effects 模糊名为artworkImage 的UIImage 以获得iOS 7 模糊效果的方法:
-(void)viewDidAppear:(BOOL)animated{
MPMediaItem *currentItem = [self.musicPlayer nowPlayingItem];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul), ^(void) {
@autoreleasepool {
MPMediaItemArtwork *artwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork];
UIImage *artworkImage = [artwork imageWithSize: CGSizeMake (618, 618)];
artworkImage = [artworkImage applyDarkEffect];
dispatch_async(dispatch_get_main_queue(), ^{
[backgroundImageView setImage:artworkImage];
UIGraphicsEndImageContext();
});
}
});
}
我的应用程序真的很慢,所以我研究了如何找出原因,然后我遇到了 Instruments,它向我展示了这个:
所以我研究了一些如何解决这个问题,并遇到了dispatch_async,所以我把实际的模糊放在了背景中,并在前面更新了 UI。它仍然非常慢。
这个名为artworkImage 的UIImage 会在音乐播放器每次跳过歌曲时更新。我将来自 Apple 示例项目(称为 UIImage+Effects.h)的 iOS 7 模糊效果应用于此 UIImage。
请告诉我该怎么做 - 我搜索了无数线程,都说使用 autorelease,我当然不能与 ARC 一起使用。
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
使用
dispatch_async在单独的线程中运行某些东西不会减少它使用的 RAM 量。 -
改图后内存占用是否保持在450MB?知道这可能有助于指出是什么原因造成的。 CPU使用率如何?我还假设您已经尝试过没有任何 dispatch_async 的东西,但如果您没有尝试过,我会尝试。
-
这句话毫无意义:“它仍然非常慢(450MB)”。 “慢”是一种速度。 “450MB”是一个大小。
-
使用“DISPATCH_QUEUE_PRIORITY_DEFAULT”肯定会减慢速度,因为您说的是“随时在后台执行此操作。”
-
@matt 我可能是错的,但我认为在这种情况下应该不会有什么不同,除非有一些其他线程占用了大量的 CPU 周期。它也无法解释大量 RAM 的使用。
标签: ios iphone memory uiimage grand-central-dispatch