2014-07-31 15 views
8

Tôi đã đọc rất nhiều đề xuất cho đúng nơi để gọi .removeObserver cho NSNotificationCenter vì viewDidUnload không phải là một tùy chọn.Đúng nơi để gọi .removeObserver cho NSNotificationCenter = Swift deinit()?

Tôi đã tự hỏi nếu deinit mới() trong Swift sẽ là một lựa chọn tốt?

-nick

+0

viewDidUnload không bao giờ là tùy chọn. Khi nào bạn thêm người quan sát? – jrturton

+0

Bạn cũng không chắc chắn về điều đó. Ruột của tôi nói viewDidLoad, nhưng một số dường như nghĩ rằng ghép nối viewWillAppear để thêm và viewWillDisappear để loại bỏ. Những người khác đã tuyên bố rằng dealloc sẽ là một nơi tốt để loại bỏ. Tôi chỉ nghĩ rằng loại bỏ trong deinit() là lớp học bị giết có thể là một lựa chọn tốt. – nick

Trả lời

10

Nó thực sự phụ thuộc vào vai trò của lớp nơi bạn đăng ký thông báo NSNotificationCenter. Nếu bạn đang đăng ký tại:

UIView

Sau đó, bạn nên bỏ đăng ký càng sớm càng nhìn được vô hình cho người dùng. Để tiết kiệm chu kỳ CPU và không tiêu thụ tài nguyên trong khi người dùng không nhìn thấy khung nhìn.

UIViewController

Ở đây nó cũng phụ thuộc vào loại hành động mà bạn sẽ thực hiện để đáp ứng với thông báo. Nếu nó chỉ là một điều chỉnh giao diện người dùng mà bạn nên hủy đăng ký ngay sau khi bộ điều khiển xem biến mất khỏi màn hình.

lớp Bạn App Dịch vụ

Ở đây nó là OK để có .removeObserver bên deinit(). tuy nhiên ngay cả ở đây tôi cũng có xu hướng đề nghị bạn rõ ràng hơn khi bạn đăng ký và hủy đăng ký thông báo NSNotificationCenter và đặt chúng vào các phương thức bắt đầu và dừng của dịch vụ của bạn.

+0

Cảm ơn Keenie. Điều đó không giúp được gì. Tôi chỉ đang quan sát một trường văn bản trong một bộ điều khiển khung nhìn, vì vậy tôi đoán các phương thức viewwillAppear và viewWillDisappear là lựa chọn đúng đắn. Chúc mừng. – nick

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