我正在尝试使用 gcd 在后台加载图像。我的第一次尝试没有奏效:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
// create UI Image, add to subview
});
});
注释掉后台队列代码并只留下主队列调度块不起作用:
dispatch_async(dispatch_get_main_queue(), ^{
// create UI Image, add to subview
});
在 gcd 块内做 ui 的东西有什么技巧吗?
为了回应 mattjgalloway 的评论,我只是想在后台线程中加载一个大图像。这是我最初尝试的完整代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0), ^{
UIImage* img = [[UIImage alloc] initWithContentsOfFile: path];
dispatch_async(dispatch_get_main_queue(), ^{
imageView = [[[UIImageView alloc] initWithImage: img] autorelease];
imageView.contentMode = UIViewContentModeScaleAspectFill;
CGRect photoFrame = self.frame;
imageView.frame = photoFrame;
[self addSubview:imageView];
});
});
我对其进行了简化,以便在主队列中运行所有内容,但即便如此它也不起作用。我想如果我不能让整个事情在主队列中工作,那么后台队列的东西就不会工作。
================ 更新 ==============
我在一个全新的项目中尝试了上述技术(gcd 和所有),它确实按预期工作。只是不在我目前的项目中。所以我必须做一些缓慢而痛苦的消除工作来找出问题所在。我正在使用此背景加载在 uiscrollview 中显示图像。事实证明,有时会出现一些图像,但并非总是如此。我会深入了解这个......
================ 更新 ==============
看起来问题与 UIScrollView 有关,所有这些都在里面。我认为应该绘制/刷新的东西没有