ios全局后台线程从未执行过

时间:2016-08-17 15:09:02

标签: ios multithreading sdwebimage

我使用以下代码在后台线程中加载图像:

NSArray *visibleCells = [self.collectionView visibleCells];
for (CCell *cell in visibleCells)
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        NSLog(@"loading cell: %lld", cell.uniqueID);
        [[SDWebImageManager sharedManager] downloadImageWithURL:cell.photoURL options:SDWebImageRetryFailed progress:nil
                                              completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
        //...

这可以运行几分钟,但后台线程完全停止执行,我必须强制关闭并重新启动才能让它再次运行。

如果我在dispatch_async处设置断点,我会看到它被调用,但我从未看到打印过的日志。

是否有理由不执行后台任务? SDWebImageManager可以捆绑线程吗?如果是这样,有什么方法可以防止这种情况发生吗?

更新:

我尝试改为:

NSLog(@"adding to background");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSLog(@"loading in background");
    NSArray *visibleCells = [self.collectionView visibleCells];
    for (CCell *cell in visibleCells) {

但同样的事情发生了 - 我看到“添加到背景”堆叠,但从未看到“在后台加载”

更新:

我将所有加载移动到主线程上,一切正常。我没有看到任何微冻/滞后,所以我会坚持使用这个选项,但是,我仍然想知道 - 如果队列太长,iOS是否会停止运行后台任务?

0 个答案:

没有答案