2016-08-04 12 views
0

Die iOS documentation besagt Folgendes mit "Durchführen von Blockoperationen":Swift verwenden, wenn Performing Blockoperationen

func performBlockAndWait (_ Block:() -> Void)

Diskussion Sie verwenden Diese Methode zum Senden von Nachrichten an verwaltete Objekte, wenn der Kontext mithilfe von NSPrivateQueueConcurrencyType oder NSMainQueueConcurrencyType initialisiert wurde.


Aber was verwirrt mich, Apples Dokumentation Beispiele mit Core Data nicht immer Verwendung „Durchführen von Blockoperationen“.

Saving Managed Objectets:

do { 
    try managedObjectContext.save() 
} catch { 
    fatalError("Failure to save context: \(error)") 
} 

Fetching Managed Objects

let moc = managedObjectContext 
let employeesFetch = NSFetchRequest(entityName: "Employee") 

do { 
    let fetchedEmployees = try moc.executeFetchRequest(employeesFetch) 
    as! [AAAEmployeeMO] 
} catch { 
    fatalError("Failed to fetch employees: \(error)") 
} 

Was ich frage mich ist, wenn der Block-Operationen zu verwenden. Es empfiehlt sich, sie immer zu verwenden, wenn Sie mit einem verwalteten Objektkontext arbeiten. Und aus welchem ​​Grund Apple sie nicht immer in ihrem Beispielcode verwendet. Hier verwenden sie es (core data api reference), und hier nicht (core data programming guide).

Antwort

1

Sie diesen Teil der API-Dokumentation verpasst:

https://developer.apple.com/reference/coredata/nsmanagedobjectcontext

Es gibt zwei Ausnahmen:

...

Wenn Ihr Code auf dem Haupt-Thread ausgeführt wird, Sie können die Methoden in den Kontexten der Warteschlangenart direkt aufrufen, anstatt die auf dem Block basierende API zu verwenden.

+0

Sorry, das habe ich nicht vermisst. Könnte meine Frage deutlicher formuliert haben. "Diskussion Sie verwenden diese Methode, um Nachrichten an verwaltete Objekte zu senden, wenn der Kontext mit NSPrivateQueueConcurrencyType oder NSMainQueueConcurrencyType initialisiert wurde." Dies schlägt vor, diese immer zu verwenden, unabhängig von Ausnahmen. Ich frage mich, was die beste Praxis ist. Da stimmt die Apple-Dokumentation nicht überein. – BARJ

+0

Ich verstehe deine Lektüre davon nicht. Die Ausnahme ist ziemlich explizit, während die Sprache der allgemeinen Regel neutral ist und keine starke Sprache hat. Das bedeutet, dass Sie im Allgemeinen (da Sie häufig Core Data-Operationen in einem Hintergrundthread durchführen) "performAndWait" verwenden müssen. Es ist auch klar aus dem Nachdenken über Threads. Was sie sagen wollen, ist, dass der MoC-Methodenaufruf * bereits * synchron ist, wenn er von demselben Thread aufgerufen wird, auf dem er konfiguriert ist. 'performAndWait' ist daher redundant. – BaseZen