Dam*_*bin 8 multithreading uiimage ios4
直到iOS 3.2,我使用这种代码UIImageView在后台加载图像,它工作得很好......
码:
- (void)decodeImageName:(NSString *)name
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *newImage = [UIImage imageNamed:name];
[myImageView setImage:newImage];
[pool release];
}
...
[self performSelectorInBackground:@selector(decodeImageName:) withObject:@"ID"]
Run Code Online (Sandbox Code Playgroud)
......即使[UIImageView setImage:]不是线程安全的!
但是从iOS 4开始,它不再起作用......图像在setImage通话两秒后出现在屏幕上.如果我做了一个[myImageView performSelectorOnMainThread:@selector(setImage:) withObject:newImage waitUntilDone:YES]而不是[myImageView setImage:newImage],图像立即显示,但似乎是在运行中再次重新解码(忽略之前[UIImage imageNamed:]应该已经解码图像数据),导致我的主线程暂停...即使文档说明底层图像缓存在所有线程之间共享..
任何想法 ?
performSelectorInBackground:在后台线程中运行选择器。然而 setImage: 是一个 UI 函数。UI 函数只能在主线程上运行。我没有深入了解这个特定的问题,但这是对该代码的第一感觉,可能是 iOS4 以某种方式以不同的方式处理在后台线程中运行 UI 函数的(不支持的)机制。
| 归档时间: |
|
| 查看次数: |
5276 次 |
| 最近记录: |