2015-04-10 3 views
9
func authenticate(completion:(success: Bool) -> Void) { 
let qos = Int(QOS_CLASS_USER_INITIATED.value) 
dispatch_async(dispatch_get_global_queue(qos, 0)){() -> Void in 
    Alamofire.request(.POST, CONSTANTS.Domain+"/accounts", parameters: ["" : ""]).responseJSON { (req, res, json, error) in 
     dispatch_async(dispatch_get_main_queue()){ 
       completion(success: true) 
     } 
    } 
} 
} 

Oder kann ich den Versand einfach weglassen und meinen Code einfach halten?Muss ich meine Alamofire-Anrufe in dispatch_async umbrechen?

+0

Nebenbei, wenn Sie eine globale Warteschlange benötigen, müssen Sie nicht den 'Wert' für die Qos erhalten und dann' Int' daraus erstellen. Es gibt eine Darstellung von 'dispatch_get_global_queue', die den 'qos_class_t' Parameter direkt übernimmt. In diesem Fall ist es problematisch, da 'NSURLSession'-basierte Lösungen überhaupt nicht zum Hintergrundthread gesendet werden müssen, sondern nur als zukünftige Referenz. – Rob

Antwort

5

Alamofire is designed to be asynchronous. In einem anderen Hinweis, wenn die Methode als Rückruf hat, ist es wahrscheinlich asynchron. Also, ja, Sie können die dispatch_async Anrufe weglassen.

+3

Einverstanden, obwohl die Annahme, dass, wenn es eine Schließung hat, dass es asynchron läuft, immer weniger wahr ist. Die historischen Zählerbeispiele waren Aufzählungsblöcke und Prädikate, aber mit Swift Functional Programming verwenden wir synchrone Closures ziemlich viel. Auch die Tatsache, dass bei Alamofire der innere Block nicht in die Hauptwarteschlange zurückgeschickt werden muss, ist ein Implementierungsdetail, das nur durch Lesen der Dokumente/Codes bestätigt werden kann. Wenn Sie asynchrone Schließungen haben, laufen sie meistens nicht auf dem Hauptthread, für Alamofire jedoch. – Rob

+0

@Rob Ja das ist wahr, ich habe Block Enumeration und so vergessen. – Schemetrical

+0

Ältere Versionen von Alamofire schienen mir häufig in den Arsch zu treten, als ich vergessen hatte, einen main_queue-Block hinzuzufügen, scheint nicht mehr zu passieren. Ist es immer noch so, dass ich alle meine Callbacks einpacken sollte und ich nur ein paar Mal Glück hatte? –

Verwandte Themen