ios – 创建UIImage线程安全吗?

ios – 创建UIImage线程安全吗?,第1张

概述调用这样的东西被认为是线程安全吗?它只创建一个UI Image,没有UI更新.我找不到任何关于此的文档. UIImage * hiResImage = [[UIImage alloc] initWithContentsOfFile:path]; 仅供参考,我稍后在主线程上进行UI更新,就像这样…… [imageViewForZoom performSelectorOnMainThread:@sel 调用这样的东西被认为是线程安全吗?它只创建一个UI Image,没有UI更新.我找不到任何关于此的文档.

UIImage * hiResImage = [[UIImage alloc] initWithContentsOffile:path];

仅供参考,我稍后在主线程上进行UI更新,就像这样……

[imageVIEwForZoom performSelectorOnMainThread:@selector(setimage:) withObject:hiResImage waitUntilDone:NO];

我所知道的:

>自iOS4以来,UIKit的许多绘图方法变得线程安全.从here开始阅读.
>我不应该在后台线程上更新ui(例如没有[myImageVIEw setimage:image];)

编辑:让我们看看另一种观点. ‘不线程安全’是否意味着它有可能永远被阻止?或者只是意味着在开始/持续时间执行时间上没有保证.如果是后一种情况,那么在加载图像时我们会有一些“未确定的”延迟量是没有问题的. UI更新在主线程上完成.因此,至少创建UIImage仍然可以认为是非线程安全的.

我知道这与问题没有关系,只是想指出来,因为我担心我原来的问题没有明确的答案:)

解决方法 我下面的经验并不直接与UIImage initContentsFromfile:但是使用UIImage imageWithData,但你的问题是关于UIImage线程的安全性.

我最近不得不调试使用[UIImage imageWithData:]的问题,该问题是从NSURLConnetionDelegate函数connectionDIDFinishLoading调用的,使用多个后台线程下载图像.由于下载的图像用于更新UI,我不得不使用下面的[NSOperationQueue mainQueue] addOperationWithBlock …

- (voID) connection:(URLConnection*)connection dIDReceiveData:(NSData *) data {    [imgData appendData:data];}- (voID) connectionDIDFinishLoading:(NSURLConnection*)connection {    [NSOperationQueue mainQueue] addOperationWithBlock:^{        UIImage *img = [UIImage imageWithData:imgData];        // more code here to update the UI    }];}

>在iOS 7.x模拟器上运行时,img保存有效图像
>在iOS 7.x设备(iPod touch)上运行时,img始终为零

在调试会话期间,我注意到当调试器一次一行地遍历每个语句时,问题(暂时)消失了.我的理论是在调试器步骤模式下运行不会让UIImage处理运行imageWithData的并发线程.因此,我相信UIImage imageWithData(或许其他类似的函数)不是线程安全的.

使用@synchronized块似乎解决了这个问题

- (voID) connectionDIDFinishLoading:(NSURLConnection*)connection {    [NSOperationQueue mainQueue] addOperationWithBlock:^{        @synchronized(imgData) {            // Run the following in a synchronized block            UIImage *img = [UIImage imageWithData:imgData];        }        // more code here ....    }];}
总结

以上是内存溢出为你收集整理的ios – 创建UIImage线程安全吗?全部内容,希望文章能够帮你解决ios – 创建UIImage线程安全吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1053407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存