2012-01-06 28 views
8

Tôi đã cố gắng tìm ra điều này tôi hứa! Có rất nhiều thông tin trên mạng này và tôi vẫn còn tràn ngập trong một biển khái niệm trừu tượng! Nó giống như khi tôi còn là một đứa trẻ và không ai có thể giải thích cho tôi tại sao một quốc gia không thể chỉ in nhiều tiền hơn và thực sự giàu có. Tôi không chậm phát triển với hầu hết các công cụ này, nhưng vì một lý do nào đó tôi không thể quấn đầu xung quanh khái niệm này, vì vậy sẽ thực sự đánh giá cao nếu ai đó có thể đánh vần nó như là "nói chuyện với một đứa bé 4 tuổi" !Các giao thức và đại biểu cho các xác ướp

Tôi nghĩ rằng hành động mục tiêu có ý nghĩa hoàn toàn đối với tôi. Đó là một cách hữu ích cho phép một cái nhìn để nói chuyện với một bộ điều khiển, mà không cần phải làm một toàn bộ rất nhiều. Theo như tôi có thể tạo ra, một đối tượng điều khiển gắn một trình lắng nghe vào đối tượng xem một cách hiệu quả sao cho nếu một sự kiện cụ thể xảy ra trên khung nhìn đó (tức là nút được đẩy) nó sẽ kích hoạt phương thức điều khiển. Điều này có thể không chính xác về mặt kỹ thuật, nhưng như một lời giải thích trừu tượng, nó có ý nghĩa với tôi.

Vì vậy, trình tự là:

  1. Một phương pháp mục tiêu được tạo ra trong đối tượng điều khiển.
  2. Chế độ xem được chọn và được kết nối đồ họa theo phương pháp đó.
  3. Sự kiện xảy ra trên chế độ xem đó kích hoạt phương thức từ bộ điều khiển.

Các giao thức và đại biểu đã khiến tôi bị lúng túng. Tôi biết nó liên quan đến việc cho phép các đối tượng nói chuyện với nhau, nhưng tôi đã cố gắng viết ra (thiếu) sự hiểu biết của tôi cho đến nay và chỉ xóa nó vì tôi nghĩ tốt nhất là không tháo nút thắt trong suy nghĩ hiện tại của tôi lau phiến đá và bắt đầu lại. Nếu ai vui lòng có thể dành chút thời gian giải thích mục đích của

  1. Sử dụng các đại biểu/giao thức như trái ngược với mục tiêu/hành động
  2. Các thành phần của mã này, và nơi nó sống
  3. Trình tự của các sự kiện đó xảy ra khi quá trình này đang được sử dụng

Tôi sẽ luôn biết ơn.

Đánh giá bởi một số nhận xét về các giải thích khác, tôi cảm thấy tôi không phải là người duy nhất bị mất một chút vì vậy hy vọng điều này sẽ được sử dụng chung. Cám ơn rất nhiều!

Edit:

Okay như tôi nghĩ có lẽ nếu tôi chỉ đặt ra hiểu biết dân ta có thể xác tôi, và nó có thể làm cho dễ dàng hơn này.

Mẫu của tôi được lấy từ Apple Docs, với Cửa sổ làm đối tượng xem và WindowDelegate làm đại biểu, trong đó một lần nhấp vào nút cửa sổ đóng sẽ kích hoạt "tôi nên đóng?" tin nhắn cho đại biểu.

Thành phần của Bộ luật: Window (Xem) WindowDelegate (View Controller?)

  1. Khai báo các giao thức mà một đại biểu có thể sử dụng trong phần giao diện của Window (View).
  2. Tạo một phiên bản của đại biểu trong Cửa sổ.
  3. Nhà nước rằng WindowDelegate triển khai Giao thức cửa sổ, bằng cách bao gồm: trong giao diện của nó. (hơi lúng túng ở đây?)
  4. Viết triển khai thực hiện cần thiết của các phương pháp trong phần triển khai WindowDelegate (Xem Bộ điều khiển).
  5. Trên một sự kiện nhất định, Cửa sổ sẽ gửi thư đến WindowDelegate với một số thông tin nhất định.
  6. WindowDelegate sẽ xử lý yêu cầu này và trả lời câu trả lời.

Bất kỳ nơi nào dọc theo đường thẳng?

+2

liên quan: http://stackoverflow.com/questions/6148148/delegates-what-are-they-really/6148838#6148838 – justin

Trả lời

-1

Đối với đại biểu, bạn có thể xem this question.

Đối với các giao thức bạn có thể muốn kiểm tra this question hoặc xem documentation.

Hy vọng điều này sẽ hữu ích!

+0

cảm ơn, nó đã dẫn tôi đến một vài điều mà tôi chưa từng thấy, đấu tranh mặc dù. – Alan

3

Có một loạt các nội dung ở đây và có vẻ như bạn đã có một vài điều nhầm lẫn.

Trước tiên, tôi khuyên bạn nên truy cập trang web dành cho nhà phát triển của Apple và tải xuống Mục tiêu học tập-C: Sách ngôn ngữ lập trình mồi và mục tiêu-C. Bỏ qua công cụ nối dây giao diện mục tiêu/hành động trong giây lát vì có vẻ như bạn cần hiểu một số điều cơ bản về Mục tiêu C. Đây là nơi bạn sẽ tìm hiểu tất cả về Giao thức, vv và các công cụ định hướng đối tượng khác.

Thứ hai, có một số sách rất hay ở đó sẽ giúp bạn từng bước phát triển một ứng dụng. Bắt đầu phát triển iPhone 4: Khám phá iOS SDK là một ứng dụng được đánh giá cao. Đây cũng là nơi bạn sẽ tìm hiểu về các đại biểu.

Thứ ba dành một chút thời gian trở lại trong tài liệu. tài liệu SDK có rất nhiều bài viết phác thảo cách mọi thứ hoạt động từ cấp độ rất cơ bản và trang web của Nhà phát triển Apple cũng rất nhiều.

+0

+1 cho 'Mục tiêu học tập-C: Một mồi'. Tôi nhớ khi học Objective-C lần đầu tiên rằng tài liệu này thực sự đã giúp tôi rất nhiều! – v1Axvw

+0

cảm ơn, tôi đang làm việc theo cách của tôi thông qua các bài giảng Stanford tại thời điểm này, tôi tìm thấy họ nhiều hơn instructive hơn so với những cuốn sách tôi có. Am vào ngày 5 tại thời điểm này, có nắm bắt hợp lý về những điều cơ bản của Objective-C, đó là ứng dụng trong xCode mà tôi đang đấu tranh. Tôi hiểu tham chiếu hành động mục tiêu ở trên có vẻ không liên quan, nhưng về cơ bản giảng viên đã mô tả mục tiêu-hành động và giao thức/đại biểu là hai phương pháp cho bộ điều khiển và khung nhìn để giao tiếp, do đó tôi đưa nó vào. – Alan

+0

Ở một mức độ nào đó, chúng giống nhau. Target/Action là một cái gì đó dành riêng cho XCode và Objective C vì nó về cơ bản cung cấp những gì chúng ta gọi là siêu dữ liệu về ứng dụng của bạn. Khi biên dịch, XCode sau đó sử dụng thông tin này kết nối mọi thứ cho bạn, tiết kiệm cho bạn phải tự viết mã để làm như vậy. Mẫu ủy quyền là ngôn ngữ độc lập. Ví dụ tôi có thể sử dụng nó trong một ứng dụng Java. Vì vậy, việc hiểu khái niệm về mô hình đại biểu sẽ giúp bạn hiểu rõ hơn về cách thức hoạt động của mục tiêu/hành động sẽ giúp bạn cụ thể hơn với ứng dụng C Mục tiêu. – drekka

0

Để hiểu các đại biểu, hãy xem các đại biểu do Cocoa cung cấp. Ví dụ: NSWindow có phương thức ủy nhiệm được gọi là - (void) windowWillĐóng: (NSNotification *) aNotification nếu bạn triển khai phương thức ủy nhiệm đó, bạn nhìn vào thông báo để xác định cửa sổ sắp đóng và thực hiện một số dọn dẹp cho cửa sổ đó . Bạn là một đại biểu cho đối tượng NSWindow theo nghĩa là bạn đang làm một số công việc cho đối tượng cửa sổ.

Tất cả các phương thức đại biểu Cocoa đều có tên bao gồm các từ như "đã làm", "sẽ", "nên", v.v. Họ cung cấp cho mã của bạn khả năng làm những việc đặc biệt ngoài những điều bình thường bởi chính những đối tượng đó - do đó bạn là một đại biểu cho những đối tượng đó.

2

Các đại biểu tồn tại để giúp bạn tránh phân lớp phụ.

Phân lớp là thứ mà bạn nên luôn tránh, vì đây là hình thức khớp nối rất chặt chẽ. Khớp nối là khi hai đối tượng phụ thuộc vào nhau để hoạt động đúng, và bạn càng có nhiều khớp nối thì càng khó thay đổi chương trình của bạn (bởi vì bất cứ khi nào bạn phải thay đổi một đối tượng, bạn sẽ bị buộc phải thực hiện thay đổi các đối tượng phụ thuộc vào nó).

Lý do phân lớp là một dạng khớp nối là vì khi bạn phân lớp từ một lớp cha, lớp con của bạn sẽ phụ thuộc vào các phương thức của lớp cha (mà lớp con kế thừa). Vì vậy, nếu bạn phải thay đổi lớp cha, thì bạn có thể phải thay đổi tất cả các lớp con với nó.

Giả sử bạn muốn có một loạt các đối tượng giống hệt nhau, ngoại trừ những gì chúng làm với một phương pháp. Bằng cách phân lớp, bạn sẽ phải tạo ra một loạt các lớp con khác nhau và ghi đè lên một phương thức trên tất cả chúng, mà sẽ có rất nhiều phân lớp (và ghép nối không mong muốn). Thay vì phân lớp một loạt các lần, bạn có thể chỉ cần tạo một lớp, và thiết kế nó để sở hữu một đối tượng của id kiểu ẩn danh, sẽ là đối tượng ủy nhiệm (chúng ta sẽ gọi nó là con). Đối tượng con này sẽ có phương thức duy nhất duy nhất mà trước đây đã có trong cha, nhưng bây giờ cha mẹ sẽ kích hoạt phương thức trên đối tượng con. Vì vậy, thay vì phân lớp một loạt các lần, chúng ta tạo ra một loạt các cá thể của cùng một lớp, và cung cấp cho mỗi đối tượng ủy nhiệm khác nhau, chúng ta có thể làm vì id kiểu không xác định loại đối tượng nào chúng ta có để sử dụng. Mỗi đối tượng ủy nhiệm khác nhau thực hiện phương thức đó một cách khác nhau và chúng ta tránh phân lớp con.

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