在dispatch_async
内进行网络通话有什么问题吗?
下面的代码放置在dispatch_async
内部时不会将任何内容记录到Flurry,但在放置在函数外部时会起作用。
Flurry文档中没有任何内容表明dispatch_async
会导致问题。
有人可以解释下面的代码有什么问题吗?
func logFlurry(eventName: String, var userData: NSMutableDictionary?) {
dispatch_async(dispatch_get_main_queue()) {
if (userData == nil) {
userData = NSMutableDictionary()
}
userData!.setObject(USER.getUsername(), forKey: "Username")
Flurry.logEvent(eventName, withParameters: userData! as [NSObject : AnyObject])
}
}
答案 0 :(得分:1)
尝试设置块外的传递字典的userData数据,
if (userData == nil) {
userData = NSMutableDictionary()
}
userData!.setObject(USER.getUsername(), forKey: "Username")
dispatch_async(dispatch_get_main_queue()) {
Flurry.logEvent(eventName, withParameters: userData! as [NSObject : AnyObject])
}
答案 1 :(得分:0)
网络调用通常放在后台线程上,因为(特别是如果你发出的响应很大的网络请求)否则网络调用将阻止UI(运行于主线程)