NSAsynchronousFetchRequest - měli aktualizovat být explicitně provedeno na hlavním vlákně

hlasů
0

Jsem vytvoření NSAsynchronousFetchRequest který má dokončení blok uvnitř ní.

Viděl jsem různé příklady, kde někteří zahrnovat použití expediční frontu na hlavním vlákně a jiní ne. Například Ray Wenderlich jádro údaje kniha nevyvolá výsledek na hlavním vlákně.

Měl bych se vrátit na hlavní niti při provádění výsledku. Původně jsem si myslel, že jsem se, ale teď už ne. Někteří definitivní jasnost by bylo skvělé.

fun exampleFetch(_ completionHandler: @escaping () -> () {
    let fetchRequest = NSFetchRequest<NSDictionary>(entityName: Example)

    let asyncFetchRequest = NSAsynchronousFetchRequest<NSDictionary>(fetchRequest: fetchRequest) { result in 
         // DispatchQueue.main.async { // is this needed
         completion()
         //}
    }

    managedContext.performChanges {
        do {
            try self.managedContext.execute(asyncFetchRequest)
        } catch let error {
            print(error trying to fetch saving objects:, error.localizedDescription)
        }
    }
}
Položena 24/10/2018 v 15:41
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Neměli byste explicitně volat rutinu dokončení na hlavní frontě. Nechte volající rozhodne, jak s ní zacházet. Kdyby nic jiného, doložit, že handler dokončení se bude jmenovat na libovolné frontě. Pak klient volá váš exampleFetchzpůsob ví, že je jejich povinností, aby se ujistili, že proces je výsledek na cokoliv fronta potřebuje.

To dává klientovi větší kontrolu.

To také zabraňuje hodně zbytečné přepínání závitu. Klient může volat exampleFetchz fronty na pozadí a může chtít zpracovat výsledky v pozadí. Máte-li výslovně dát dokončení na hlavní frontě, pak klient musí explicitně přepnout zpět do fronty na pozadí zpracovávat výsledek. To jsou dva zbytečné fronty přepínače a je to plýtvání úsilí na hlavní frontě.

Odpovězeno 24/10/2018 v 15:52
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more