Di aplikasi saya, saya memiliki layanan latar belakang dan pengontrol tampilan yang memerlukan pembaruan lokasi (tidak terus-menerus). Jadi, menurut saya lebih baik memiliki kelas tunggal untuk menangkap pembaruan lokasi dan mendistribusikannya ke berbagai bagian aplikasi saya daripada mendelegasikannya ke setiap objek yang memerlukan lokasi.
Manajer lokasi saya adalah kelas tunggal yang menyiapkan CLLocationManager, mengaktifkan lokasi ketika ada sesuatu yang memanggil manajer lokasi dan menanyakan lokasi. Cara kerjanya adalah, ia memiliki metode CurrentLocation yang menerima penutupan sebagai argumen. locationManager menyimpan penutupan yang diteruskan ke metode ini dalam sebuah array. Setiap kali metode ini dipanggil, locationManager mengaktifkan pembaruan lokasi dan setelah memiliki lokasi yang cukup baik, ia akan mengeksekusi semua penutupan, meneruskan lokasi yang diperoleh ke dalamnya dan menghapus antrian eksekusi.
Saya mengetahui siklus penyimpanan dan berhati-hati dengan daftar tangkapan yang diberikan di penutupan. Namun, saya mendapatkan thunk for @escaping @callee_guaranteed crash
yang langka saat penutupan sedang dijalankan. Terakhir kali saya mendapatkan ini, log mengeluhkan penggunaan yang buruk dari yang lemah. Saya menggunakan objek referensi lemah (self lemah) dalam penutupan, tetapi penutupan lainnya hanya dijalankan jika referensi lemah benar-benar menyimpan referensi ke suatu objek (if let self = self { ... }
)
Saya punya beberapa pertanyaan
Apakah ini desain yang buruk? Bisakah saya melakukan ini dengan cara yang lebih baik?
Saya tahu NSNotifications juga merupakan cara yang tepat untuk mengirimkan data ke berbagai bagian aplikasi. Saya ingin tahu apakah ini lebih baik atau lebih buruk dari desain saya dan bagaimana caranya.
Ketika saya ingin mengirimkan pembaruan lokasi terus-menerus ke objek yang berbeda, metode apa yang baik? Seperti, menambahkan pengamat dengan target dan pemilih (ini adalah objektifC-ish)
Saya punya desain lain dalam pikiran. LocationManager saya akan memiliki metode
addObserver
dengan argumen yaitu objek yang mengimplementasikan protokol untuk menerima pembaruan lokasi. Apakah ini desain yang bagus?
Publisher
. - person Alexander   schedule 08.07.2020