【发布时间】:2015-04-07 11:17:25
【问题描述】:
我使用assetForURL() 来查找图像的NSData,并使用这些数据找到NSData 的md5 值
var imageData = NSData()
self.assetsLibrary.assetForURL(url, resultBlock: {
(asset: ALAsset!) in
if asset != nil {
let assetRep: ALAssetRepresentation! = asset.defaultRepresentation()
let sizeOfRawDataInBytes: Int = Int(assetRep.size())
var rawData: NSMutableData = NSMutableData(length: sizeOfRawDataInBytes)!
var bufferPtr: UnsafeMutablePointer<Void> = rawData.mutableBytes
var bufferPtr8: UnsafeMutablePointer<UInt8> = UnsafeMutablePointer<UInt8>(bufferPtr)
var error: NSError? = nil
assetRep.getBytes(bufferPtr8, fromOffset: 0, length: sizeOfRawDataInBytes, error: &error)
imageData = NSData(bytesNoCopy: bufferPtr8, length: sizeOfRawDataInBytes, freeWhenDone: false)
}
}, failureBlock: {
(error: NSError!) in
NSLog("Error!")
}
)
//want to block until completion block is finished execution
var data = imageData // give me output zero bytes
var hash = imageData.md5
通过一些研究,我发现主线程没有等待完成块完成执行
请有人帮忙阻止主线程,直到我的完成块被执行
【问题讨论】:
-
它不应该等待。你为什么想要它?
-
因为首先我在 For 循环中运行上面的代码,它会给我胎儿错误
-
阻塞主线程可能是最糟糕的主意。它会冻结你的用户界面
-
我同意@zisoft。你需要使用回调来获取你想要的数据。
-
你能参考一些callBack的例子吗
标签: multithreading swift