2010-01-03 80 views
5

Trong mọi ứng dụng iPhone điển hình, sẽ có các lớp mô hình chịu trách nhiệm tải/phân tích dữ liệu. Sau khi hoàn thành nhiệm vụ tải/phân tích cú pháp dữ liệu, các bộ điều khiển bị ảnh hưởng cần được thông báo về thay đổi trong mô hình và cập nhật chế độ xem tương ứng.Ưu điểm và nhược điểm của phương pháp nghe/quan sát để thông báo Thay đổi mô hình

Có một số phương pháp tiếp cận người nghe/người quan sát về điều này trong phát triển ứng dụng iPhone. Ưu điểm/nhược điểm và lý do sử dụng mỗi phương pháp sau đây là gì?

  1. KVO
  2. NSNotification
  3. Đại biểu
  4. Bất kỳ phương pháp khác được biết đến

Trả lời

9

Theo kinh nghiệm của riêng tôi:

Phái đoàn:

  • PRO: chỉ sử dụng khi bạn có một đối tượng để thông báo;
  • PRO: sử dụng giao thức rõ ràng, bạn có thể ghi rõ ý định của mình;
  • CON: có thể là nguồn gốc của tai nạn và rò rỉ bộ nhớ nếu sử dụng sai (tip: không giữ lại các đại biểu, gán cho họ, và nhớ để deassign đại biểu khi/nếu chúng được phát hành)

tôi đã viết về các vấn đề quản lý bộ nhớ được tạo ra bởi phái đoàn trong bài viết này trên blog của tôi:

http://akosma.com/2009/01/28/10-iphone-memory-management-tips/

NSNotification:

  • PRO: tốt hơn khi bạn có một số đối tượng để thông báo;
  • PRO: rất linh hoạt, dẫn đến các lớp được kết nối lỏng lẻo;
  • CON: thông báo được gửi đồng bộ (vì vậy hãy đảm bảo rằng trình xử lý thông báo riêng lẻ của bạn chỉ làm rất ít)
  • CON: đôi khi khó lập tài liệu và duy trì. Hãy chắc chắn giải thích rõ ràng trong tài liệu tiêu đề ý nghĩa của từng thông báo và thời điểm gửi thông báo.

KVO:

  • quan ngại tương tự về NSNotifications;
  • CON: thậm chí còn mơ hồ hơn đối với tài liệu. Hãy chắc chắn thêm nhiều tài liệu tiêu đề hoặc mẹo kiến ​​trúc hơn vào nhận xét của bạn để giải thích ai đang lắng nghe những gì. Cá nhân tôi sẽ không sử dụng KVO để tải dữ liệu hoặc phân tích nhiệm vụ.

Cá nhân, khi giao dịch với các ứng dụng hỗ trợ mạng nói đến dịch vụ web từ xa, tôi sử dụng lớp trình nạp dữ liệu đơn (bao gói ASIHTTPRequest và xử lý tất cả tuần tự hóa và deserialization).Bằng cách này, tôi có thể yêu cầu ủy nhiệm ứng dụng xử lý các lỗi kết nối của riêng mình (xuất hiện các cảnh báo và nếu được yêu cầu), và mỗi bộ điều khiển chỉ quan tâm đến các phản hồi mà nó muốn.

Tất nhiên, cách tiếp cận này phụ thuộc vào ứng dụng, nhưng kiến ​​trúc chung này có thể là điểm bắt đầu cho mã của riêng bạn.

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