Bạn có thể sử dụng -removeObserver:
trước tiên và sau đó gọi -addObserver:
có cùng tên không? Hoặc trước tiên, có một quy tắc để có -addObserver:
trước -removeObserver:
không?truy vấn addobserver/removeobserver
Tôi đã thử sử dụng OS 4.0 và có vẻ như OK (không có sự cố, cảnh báo ... v.v.).
-(void) setObserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:OBSERVER_NAME object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector: @selector(selectorName)
name:OBSERVER_NAME
object:nil];
}
Lý do là để ngăn chặn hai nhà quan sát với cùng phương pháp selectorName
được gọi hai lần giả định rằng phương pháp -setObserver
được gọi một lần nữa nếu bên trong của nó -viewDidLoad
và cảnh báo bộ nhớ đã được ban hành.
Ngoài ra, tôi có cần gọi số -removeObserver:
trong thời gian -dealloc
không?
+1 câu hỏi hay. Tôi không biết nếu nó lưu để loại bỏ một Observer mà không được đăng ký trước, nhưng tôi biết đó là phải để loại bỏ các quan sát viên trước khi deallocing. Đối với trường hợp cụ thể của bạn, bạn cũng có thể xóa người quan sát trong viewDidUnload. Đó là những gì phương pháp này là để: Cân bằng tất cả các cuộc gọi được thực hiện trong loadView và viewDidLoad. – tonklon