gpt4 book ai didi

multithreading - iOS4 & 背景 [UIImage setImage :]

转载 作者:行者123 更新时间:2023-12-04 07:29:34 27 4
gpt4 key购买 nike

到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"]

... 即使 [UIImageView setImage:]不是线程安全的!

但是从 iOS 4 开始,它不再起作用了... setImage 两秒后图像出现在屏幕上称呼。如果我做 [myImageView performSelectorOnMainThread:@selector(setImage:) withObject:newImage waitUntilDone:YES]而不是 [myImageView setImage:newImage] ,图像立即出现,但似乎在运行中再次重新解码(忽略之前应该已经解码图像数据的 [UIImage imageNamed:]),导致我的主线程暂停......即使文档说底层图像缓存在所有线程之间共享。

任何想法 ?

最佳答案

不要在后台做!它不是线程安全的。从 UIImageView也是NSObject ,我认为使用 -[performSelectorOnMainThread:withObject:waitUntilDone:]它可能会起作用,例如:

[myImageView performSelectorOnMainThread:@selector(setImage:) withObject:newImage waitUntilDone:NO];

它是 UIImage这是新制作的线程安全的。 UIImageView仍然不是线程安全的。

关于multithreading - iOS4 & 背景 [UIImage setImage :],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com