Apakah Panggilan API Asinkron (Parse) hanya menggunakan GCD? iOS

Sesuai dengan judulnya...

Apakah panggilan API Asynchronous, seperti di Parse API untuk iOS, cukup letakkan panggilan tersebut di thread baru (menggunakan GCD) sehingga panggilan tersebut dilakukan "di latar belakang"?

Jika ini masalahnya maka saya akan berasumsi bahwa panggilan API Sinkron tetap ada di thread saat ini.

Terima kasih!


person justColbs    schedule 26.08.2015    source sumber


Jawaban (4)


tl;dr terserah pengembang dengan beberapa pengecualian

Pertama-tama, Anda tidak mengontrol thread melalui GCD, Anda menempatkan tugas di antrian.

Grand Central Dispatch (GCD) adalah teknologi yang dikembangkan oleh Apple Inc. untuk mengoptimalkan dukungan aplikasi untuk sistem dengan prosesor multi-core dan sistem multiprosesor simetris lainnya. Ini adalah implementasi paralelisme tugas berdasarkan pola kumpulan thread. Ide dasarnya adalah memindahkan pengelolaan kumpulan thread dari tangan pengembang, dan lebih dekat ke sistem operasi. Pengembang memasukkan "paket kerja" ke dalam kumpulan tanpa menyadari arsitektur kumpulan tersebut. Model ini meningkatkan kesederhanaan, portabilitas, dan performa.1

Kedua, apa yang Anda maksud dengan API? Saya kira Anda ingin mengatakan REST API. Asumsi lainnya adalah yang Anda maksud adalah SDK asli untuk layanan REST API, karena jika Anda mengimplementasikannya sendiri melalui perpustakaan jaringan maka Anda bertanggung jawab untuk ini. Seperti yang saya lihat dari pengalaman saya selama lebih dari 3 tahun di iOS, semua panggilan ke metode apa pun disinkronkan secara default, merupakan tanggung jawab pengembang untuk menempatkannya ke antrean lain melalui GCD atau NSOperationQueue atau apa pun.

Harap jangan bingung dengan adanya argumen blok penyelesaian di akhir panggilan API. Secara umum Anda juga bertanggung jawab untuk memastikan setiap pembaruan UI dilakukan di antrean utama, karena secara default blok ini dijalankan bukan di antrean utama, Anda mungkin ingin melakukan manipulasi pada data Anda peroleh dari server, mis. mengurutkan, mengonversi ke tipe lain, dll.

Hanya ada sedikit pengecualian pada SDK yang menempatkan seluruh blok penyelesaian pada antrean utama, misalnya. AFNetworking atau Parsing. Namun dalam kasus ini vendor SDK memberikan informasi tentang perilaku ini.

person Yurii Kolesnykov    schedule 26.08.2015

Saya yakin ini menggunakan prioritas atau antrian operasi yang sama dengan asal panggilan tersebut. Misalnya, saat melakukan panggilan Parse API di thread utama, Anda akan sering mendapat peringatan tentang operasi thread utama yang sudah berjalan lama.

Saya tidak akan berasumsi bahwa ini adalah kasus untuk semua panggilan API, karena pembungkus perpustakaan di sekitar panggilan api dapat menggunakan antrian operasi pribadinya dalam beberapa kasus.

person Lytic    schedule 26.08.2015

Belum tentu. Itu bisa berada di antrian operasi lain dengan prioritas pengiriman berbeda

person Saleh Albuga    schedule 26.08.2015

Itu akan berada di thread lain, seperti yang terlihat pada kode sumber terbuka. Ia menggunakan kunci dan tag @synchronize untuk memastikan bahwa semuanya akhirnya bertemu pada akhirnya untuk blok, dll.

person AlexKoren    schedule 26.08.2015