Mrw*_*lfy 4 asynchronous save uiimage grand-central-dispatch ios
只是学习如何在线程之间分配任务,或者异步调度.我知道任何"触及"视图的操作都必须在主线程上完成.怎么样UIImageWriteToSavedPhotosAlbum?我认为这可以在后台线程上完成,但我错了吗?
此外,如果它应该在后台线程上完成,下面这两个调用之间是否有区别,因为一个保存UIImage而另一个从视图中保存UIImage?
UIImageWriteToSavedPhotosAlbum(_someUIImage ,nil,nil,nil);
UIImageWriteToSavedPhotosAlbum(_imageView.image ,nil,nil,nil);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我使用这个设置在主线程中运行HUD,在后台运行任务,这是我的意图.
[HUD_code showMessage:@"saving image"];
dispatch_queue_t concurrentQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
UIImageWriteToSavedPhotosAlbum(someUIImage ,nil,nil,nil);
dispatch_async(dispatch_get_main_queue(), ^{
[HUD_code dismiss];
});
});
Run Code Online (Sandbox Code Playgroud)
UIKit类被记录为仅可从主线程使用,除非另有说明.(例如,UIFont记录为线程安全的.)
关于UIKit 函数的线程安全性(与类不同)没有明确的一揽子声明,因此假设它们通常是线程安全的并不安全.某些UIKit函数UIGraphicsBeginImageContext被明确记录为线程安全的事实意味着UIKit函数通常不是线程安全的.
既然UIImageWriteToSavedPhotosAlbum可以发送异步完成消息,你应该在主线程上调用它并使用它的完成支持来执行你的[HUD_code dismiss].
| 归档时间: |
|
| 查看次数: |
3742 次 |
| 最近记录: |