Jawaban umumnya adalah "segera setelah Anda tidak lagi membutuhkan notifikasi". Ini jelas bukan jawaban yang memuaskan.
Saya akan merekomendasikan, bahwa Anda menambahkan panggilan [notificationCenter removeObserver: self]
dalam metode dealloc
kelas-kelas itu, yang ingin Anda gunakan sebagai pengamat, karena ini adalah kesempatan terakhir untuk membatalkan pendaftaran pengamat dengan rapi. Namun, ini hanya akan melindungi Anda dari crash karena pusat notifikasi memberi tahu benda mati. Itu tidak dapat melindungi kode Anda dari menerima pemberitahuan, ketika objek Anda belum / tidak lagi dalam keadaan di mana mereka dapat menangani pemberitahuan dengan benar. Untuk ini ... Lihat di atas.
Sunting (karena jawabannya tampaknya menarik lebih banyak komentar daripada yang saya kira) Yang ingin saya katakan di sini adalah: sangat sulit untuk memberikan nasihat umum tentang kapan waktu terbaik untuk menghapus pengamat dari pusat pemberitahuan, karena itu tergantung:
- Mengenai kasus penggunaan Anda (Pemberitahuan mana yang diamati? Kapan mereka dikirim?)
- Implementasi pengamat (Kapan siap menerima notifikasi? Kapan tidak lagi siap?)
- Waktu hidup yang diinginkan dari pengamat (Apakah terikat pada objek lain, katakanlah, view atau view controller?)
- ...
Jadi, saran umum terbaik yang bisa saya berikan: untuk melindungi aplikasi Anda. terhadap setidaknya satu kemungkinan kegagalan, lakukan removeObserver:
tariannya dealloc
, karena itulah titik terakhir (dalam kehidupan objek), di mana Anda dapat melakukannya dengan rapi. Ini tidak berarti: "cukup tunda penghapusan sampai dealloc
dipanggil, dan semuanya akan baik-baik saja". Sebagai gantinya, hapus pengamat segera setelah objek tidak lagi siap (atau diperlukan) untuk menerima notifikasi . Itu adalah momen yang tepat. Sayangnya, karena tidak mengetahui jawaban atas semua pertanyaan yang disebutkan di atas, saya bahkan tidak dapat menebak, kapan saat itu akan tiba.
Anda selalu dapat dengan aman removeObserver:
suatu objek beberapa kali (dan semua kecuali panggilan pertama dengan pengamat tertentu akan menjadi nops). Jadi: pikirkan untuk melakukannya (lagi) dealloc
hanya untuk memastikan, tetapi yang pertama dan terpenting: lakukan pada saat yang tepat (yang ditentukan oleh kasus penggunaan Anda).