ในแอปของฉัน ฉันมีบริการพื้นหลังและตัวควบคุมมุมมองที่ต้องการการอัปเดตตำแหน่ง (ไม่ตลอดเวลา) ดังนั้น ฉันคิดว่าจะดีกว่าถ้ามีคลาสเดี่ยวเพื่อบันทึกการอัปเดตตำแหน่งและแจกจ่ายไปยังส่วนต่างๆ ของแอปของฉัน แทนที่จะมอบหมายในทุกออบเจ็กต์ที่ต้องการตำแหน่ง
ผู้จัดการสถานที่ของฉันเป็นคลาสเดี่ยวที่ตั้งค่า CLLocationManager เปิดตำแหน่งเมื่อมีบางสิ่งโทรหาผู้จัดการสถานที่และขอตำแหน่ง วิธีการทำงานนี้มีเมธอด currentLocation ที่ยอมรับการปิดเป็นอาร์กิวเมนต์ locationManager จัดเก็บการปิดที่ส่งผ่านไปยังวิธีนี้ในอาร์เรย์ เมื่อใดก็ตามที่มีการเรียกใช้เมธอด locationManager จะเปิดการอัปเดตตำแหน่ง และเมื่อมีตำแหน่งที่ดีเพียงพอแล้ว ก็จะดำเนินการปิดทั้งหมด โดยส่งตำแหน่งที่ได้มาเข้าไปและล้างคิวการดำเนินการ
ฉันทราบถึงรอบการเก็บรักษา และฉันระมัดระวังกับรายการจับที่ให้ไว้ในการปิด อย่างไรก็ตาม ฉันได้รับ thunk for @escaping @callee_guaranteed crash
ที่หายากในขณะที่กำลังดำเนินการปิด ครั้งสุดท้ายที่ฉันได้รับสิ่งนี้ บันทึกบ่นเกี่ยวกับการใช้งานที่อ่อนแอของความอ่อนแอ ฉันกำลังใช้วัตถุอ้างอิงที่อ่อนแอ (ตัวเองที่อ่อนแอ) ในการปิด แต่การปิดส่วนที่เหลือจะดำเนินการก็ต่อเมื่อการอ้างอิงที่อ่อนแอนั้นมีการอ้างอิงถึงวัตถุจริง ๆ (if let self = self { ... }
)
ฉันมีคำถามสองสามข้อ
นี่เป็นการออกแบบที่ไม่ดีเหรอ? ฉันสามารถทำได้ด้วยวิธีที่ดีกว่านี้หรือไม่?
ฉันรู้ว่า NSNotifications ยังเป็นวิธีที่ใช้ได้ผลในการส่งข้อมูลไปยังส่วนต่างๆ ของแอป ฉันอยากรู้ว่าสิ่งนี้ดีกว่าหรือแย่กว่าการออกแบบของฉันและอย่างไร
เมื่อฉันต้องการส่งการอัปเดตตำแหน่งอย่างต่อเนื่องไปยังออบเจ็กต์ต่างๆ วิธีใดคือวิธีที่ดี เช่นการเพิ่มผู้สังเกตการณ์ด้วยเป้าหมายและตัวเลือก (นี่คือ objectC-ish)
ฉันมีการออกแบบอื่นในใจ locationManager ของฉันจะมีเมธอด
addObserver
พร้อมอาร์กิวเมนต์ที่เป็นออบเจ็กต์ที่ใช้โปรโตคอลเพื่อรับการอัปเดตตำแหน่ง นี่เป็นการออกแบบที่ดีหรือไม่?
Publisher
- person Alexander   schedule 08.07.2020