Mặc dù tôi có một số ý tưởng sử dụng khi nào nhưng việc sử dụng chính xác vẫn chưa rõ ràng đối với tôi. Ai đó có thể giải thích bằng ví dụ ...? Cảm ơn.KVO vs NSNotification so với giao thức/đại biểu?
Trả lời
Sử dụng đại biểu nếu bạn chỉ muốn nói chuyện với một đối tượng. Ví dụ, một tableView có một delegate - chỉ một đối tượng phải chịu trách nhiệm đối phó với nó.
Sử dụng thông báo nếu bạn muốn thông báo cho mọi người biết điều gì đó đã xảy ra. Ví dụ trong các tình huống bộ nhớ thấp, một thông báo được gửi cho ứng dụng của bạn biết rằng đã có cảnh báo bộ nhớ. Bởi vì rất nhiều đối tượng trong ứng dụng của bạn có thể muốn giảm mức sử dụng bộ nhớ của nó, đó là thông báo.
Tôi không nghĩ KVO là một ý tưởng hay và cố gắng không sử dụng nó, nhưng nếu bạn muốn tìm hiểu xem tài sản có thay đổi hay không, bạn có thể nghe thay đổi.
Hy vọng điều đó sẽ hữu ích.
Tôi biết điều này là cũ, nhưng tôi vẫn muốn không đồng ý với nó :) Bài viết đó làm cho điểm tuyệt vời lại. lý do tại sao các KVO API bị hỏng, nhưng nó cũng chính xác nói rằng nó vẫn là một công cụ mạnh mẽ. Có rất nhiều tình huống mà nó có thể tiết kiệm rất nhiều mã xấu xí. Sử dụng nó với một wrapper như một trong những ông đã cung cấp nếu bạn thích, nhưng sử dụng nó. – Shinigami
Sử dụng KVO khi người quan sát cần phản ứng ngay lập tức. Và chúng ta có thể NSNotifications khi các nhà quan sát có thể chờ đợi cho vòng lặp sự kiện. – MANN
@MANN Tôi không nghĩ rằng tôi hiểu - thông báo không đồng bộ, chúng cũng được kích hoạt ngay lập tức (mặc dù bạn không nhận được các tùy chọn willChange bạn nhận được với KVO) – deanWombourne
Sử dụng một đại biểu khi có một "master/slave" mối quan hệ (đại biểu biết về lớp và lớp biết về các đại biểu), với một lớp cao hơn hệ thống phân cấp quản lý, và khi nó là rõ ràng rằng sẽ không có tình huống mà các yếu tố khác (chủ yếu là UI) sẽ quan tâm đến việc biết những gì lớp học đã nói. Sử dụng thông báo khi lớp học không quan tâm đến việc biết ai lắng nghe và số lượng họ đang nghe, bất kỳ ai và bất kỳ số nào đều có thể đăng ký nhận thông báo. KVO rất hữu ích khi nghe "mà không có lớp biết", mặc dù tất nhiên đó không phải là trường hợp, lớp mà KVO được áp dụng không cần phải thay đổi.
Ủy quyền là mẫu thiết kế mà bạn sử dụng khi bạn muốn một số đối tượng khác sửa đổi hành vi của người gửi. Ví dụ: cửa sổ đầu cuối tránh hiển thị bất kỳ dòng hoặc ký tự nào được cắt bớt bởi các cạnh của cửa sổ, bởi vì ủy nhiệm của cửa sổ đầu cuối thay đổi kích thước của cửa sổ để đảm bảo điều này.
Thông báo là mẫu để sử dụng khi bạn không cần phản hồi. Ví dụ: bạn nhận được thông báo rằng hệ thống sắp chuyển sang chế độ ngủ. Người gửi thông báo đó không quan tâm bạn làm gì với thông báo đó.
Theo ý kiến của tôi, KVO tốt hơn vì đó là lợi thế không có phí. Thông báo có phí ngay cả khi bạn không sử dụng/quan sát chúng. Để cải thiện mà bạn có thể sử dụng NotificationCenters khác nhau nhưng ngay cả với một số chi phí sẽ có (sửa chữa cho tôi nếu tôi sai). KVO có chút phức tạp nhưng đáng giá khi bạn phải quan sát rất nhiều thứ.
Bao nhiêu, thực tế nói, là chi phí? – Liron
Ngay cả khi tất cả ba sẽ phục vụ nhu cầu của bạn trong một tình huống, đại biểu sẽ vẫn là một lựa chọn thích:
- Reuseability.
- Tự ghi nhận. Bằng cách kiểm tra tập tin tiêu đề của lớp, người ta sẽ ngay lập tức nhận ra những gì/làm thế nào dữ liệu trao đổi lấy địa điểm.
- 1. NSNotification VS KVO
- 2. NSNotification vs. Delegate Protocols?
- 3. Stackpanel: Chiều cao so với ActualHeight so với ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 4. NSNotification là gì?
- 5. NSNotification EXC_BAD_ACCESS
- 6. Tích lũy vs lần so với giảm so với nén
- 7. KVO bắn khi giá trị giao là không khác nhau
- 8. ID so với UniqueID vs ClientID vs UniqueClientID so với StaticClientID?
- 9. Đặc điểm so với giao diện so với Mixins?
- 10. Đo thời gian trong Linux - thời gian so với đồng hồ so với getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 11. NSMutableDictionary KVO
- 12. Node-PerfectAPI vs Restify.js so với ExpressJS vs Node-APIServer
- 13. Thành phần so với đoàn đại biểu
- 14. Tuần tự hóa hiệu năng cao: Bộ đệm giao thức Java vs Google so với ...?
- 15. SVG rect so với div vs canvas
- 16. SortedList so với SortedDictionary vs. Sort()
- 17. Boo vs C# so với Python?
- 18. Qcodo vs. CakePHP so với Zend
- 19. Cách sử dụng NSNotification
- 20. Blocks vs đại biểu
- 21. Thiết kế GUI - Nhiều biểu mẫu so với MDI mô phỏng (Tab) vs PageControl
- 22. NSMutableDictionary addition and KVO
- 23. Hiểu KVO trong iOS
- 24. Delegate.CreateDelegate vs DynamicMethod vs Biểu
- 25. PyQt vs PySide so sánh
- 26. ArrayAccess so với ArrayIndex trong cây biểu thức
- 27. Cách chuyển userInfo trong NSNotification?
- 28. Đại biểu (biểu thức Lambda) Vs Giao diện và lớp trừu tượng
- 29. Đại biểu so với từ khóa đại biểu
- 30. Patch so với Hotfix so với bản phát hành bảo trì so với gói dịch vụ vs
Hãy thử đọc bài viết này, đây là một bài viết trên blog thực sự thú vị về chủ đề cho quan điểm lập trình viên. http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/ – Daniel