2013-03-27 32 views
42

Việc thêm một người quan sát có tăng số lượng giữ lại của một đối tượng không? Nếu có, ARC có xử lý việc xóa người quan sát này không? Nếu không, tôi nên loại bỏ người quan sát ở đâu?NSNotificationCenter removeObserver trong ARC có cần thiết không?

+0

Xem [câu hỏi này] (http://stackoverflow.com/q/13911651/730701). – Adam

+0

Điều này cũng giống như tôi đã hỏi vài tháng trở lại :) –

+2

Tôi nghĩ rằng nó hợp lệ hỏi lại những câu hỏi này khi tôi muốn tìm câu trả lời mới nhất cho các câu hỏi trong trường hợp sự khôn ngoan nhận thức đã thay đổi. – amergin

Trả lời

78

Bạn nên xóa người quan sát ngay cả khi bạn sử dụng ARC. Tạo một phương pháp dealloc và loại bỏ có ..

-(void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

Nếu bạn thấy phương pháp này bạn không cần phải gọi [super dealloc]; đây, chỉ có các phương pháp mà không super dealloc cần thiết.

CẬP NHẬT cho Swift

Bạn có thể loại bỏ quan sát viên trong deinit phương pháp nếu bạn đang viết mã trong nhanh chóng.

deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
     } 
+0

Một câu hỏi: Khi bạn gọi addObserver, NSNotificationCenter có giữ lại người quan sát hay không? Cảm ơn. – Ricardo

+0

Nó không được giữ lại! – Pei

+3

trung tâm thông báo sẽ không giữ tài liệu tham khảo mạnh mẽ của người quan sát, do đó không cần phải xóa chúng một cách rõ ràng trong 'ARC'. – holex

Các vấn đề liên quan