2017-04-25 52 views
-1

我正在通過MQTT與GLOBAL_QUEUE_PRIORITY_HIGH進行連接。它是否正確?因爲我的UI需要時間來回應。GLOBAL_QUEUE_PRIORITY_DEFAULT停止用戶界面響應

dispatch_async(dispatch_get_global_queue(GLOBAL_QUEUE_PRIORITY_HIGH,0),{ 
    guard self.session != nil else { 
     fatalError("Could not create MQTTSession") 
    } 


    let transportSocket:MQTTCFSocketTransport = MQTTCFSocketTransport() 
    transportSocket.host = MQTT_HOST; 
    transportSocket.port = MQTT_PORT; 


    self.session!.transport = transportSocket 


    self.session!.delegate = self 
    self.session!.userName = token 
    self.session!.password = userId 
    self.session!.keepAliveInterval = 300 
    self.session!.cleanSessionFlag = false 
    self.connect() 
}) 

我想將它從主線程分開。這就是我爲什麼這麼做的原因。請告訴我這是否正確。

+0

我不是很深入MQTTFramework,但我已經看到了它的測試類是:是否能夠執行同步或異步MQTTSession如果你可以將其設置爲異步,我很確定它不會影響,如果它不在主隊列中執行,請參閱:https://github.com/ckrey/MQTT-Client-Framework/blob/master/MQTTClient/MQTTClient/MQTTSession.m 45行 @property(nonatomic)BOOL synchronConnect; – Lepidopteron

回答

0

你會寫在主要方法不是GLOBAL_QUEUE_PRIORITY_HIGH。

dispatch_async(dispatch_get_global_queue(GLOBAL_QUEUE_PRIORITY_HIGH,0),{ 
// Here you can call methods like getting data from database or from server. 

//注意:不要嘗試任何UI更新,有些時候,它可能會崩潰你的應用程序。 dispatch_async(dispatch_get_main_queue(){

 // Here you can write for update UI. 

    }) 
}) 
+0

我沒有更新任何用戶界面,只是連接到mqtt服務器。 – John