2011-08-27 16 views
27

Tôi vừa mới học về phát triển ứng dụng iPhone nhưng tôi khó có thể hiểu được đại biểu thực sự có ý nghĩa gì? Bất cứ ai có thể cho tôi biết với những gì nó làm và nó quan trọng như thế nào? Cảm ơn bạn đã giúp!Đại biểu chính xác làm gì trong dự án xcode ios?

+0

Xin xem: http://stackoverflow.com/questions/7118598/what-is-the-difference-between-notifications-delegates-and -giao thức và nhớ tìm kiếm trước khi đăng! :) – Luke

+0

Bất kỳ câu hỏi nào khác về đại biểu? Trả lời có ý nghĩa? – bryanmac

+0

Đồng thời xem [link] (http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html). – HDdeveloper

Trả lời

41

Đó là một khái niệm quan trọng để hiểu khái niệm, vì vậy hãy suy nghĩ về cách suy nghĩ về nó trước các chi tiết kỹ thuật là quan trọng. Đơn giản chỉ cần đặt, một đại biểu là một cuộc gọi lại.

Hai kịch bản chính để sử dụng các đại biểu:

  1. Một lớp học hoặc kiểm soát muốn trừu tượng ra các chi tiết về làm thế nào để thực hiện công việc (như lấy dữ liệu).
  2. Cho phép người khác móc mã vào một đường ống.

Ví dụ: UITableView - chế độ xem bảng chỉ là điều khiển biết cách hiển thị danh sách ô. Nó xử lý tất cả việc nâng tải hình ảnh, di chuyển, v.v ... nhưng không có ý tưởng về cách tải dữ liệu của bạn. Vì vậy, bạn thực hiện một đại biểu nguồn dữ liệu có phương pháp để có được các dữ liệu di động cho một hàng nhất định vv ... Điều đó làm cho nó dễ dàng trên bạn. Bạn chỉ cần sử dụng điều khiển và cắm các chi tiết cụ thể cho dữ liệu của bạn. UITableView sẽ làm mọi thứ cho bạn ... chỉ cần trả lời một vài câu hỏi cụ thể. Một đại biểu trả lời một vài câu hỏi cụ thể.

Điều khiển văn bản - bạn thêm điều khiển văn bản vào chế độ xem và thì đấy! bạn có thể nhập vào nó và tất cả đều tốt. Nhưng nếu bạn muốn làm điều gì đó khi họ bắt đầu nhập hoặc khi họ gõ xong? Vâng, điều khiển văn bản cung cấp một đại biểu với các phương pháp cho phép bạn nối vào đường dẫn thực hiện của điều khiển văn bản. Nó cho phép điều khiển văn bản làm mọi thứ cho bạn và cho phép bạn xen vào mã mà bạn cần nó. Nhiều lần, có cách để xen vào mã để đưa ra quyết định về việc liệu có được phép nào đó không. Kiểm soát sẽ gọi lại và hỏi, tôi có thể làm x không? Bạn có thể xen vào mã và ảnh hưởng đến hành vi.

Nếu bạn đang tạo điều khiển hoặc lớp học, bạn có thể tạo giao thức, đại biểu nguồn dữ liệu của riêng bạn, v.v. để kiểm soát của bạn có thể tập trung vào việc quảng cáo. Ví dụ: giả sử bạn muốn tạo điều khiển tác vụ. Bạn có thể:

Trước tiên, hãy tạo hợp đồng. Này, nếu bạn định cung cấp dữ liệu cho kiểm soát của tôi, đây là những câu hỏi tôi sẽ hỏi bạn. Tôi sẽ lấy nó từ đó ... Trong trường hợp này, tôi sẽ hỏi bạn số nhiệm vụ và tôi sẽ cho bạn một nhiệm vụ cho số hàng.

@protocol XXTaskBoardDelegate <NSObject> 
-(NSInteger*)getTaskCount; 
-(XXTask*)getTaskForRow:(NSInteger*)rowNumber; 
@end 

Trong điều khiển hoặc lớp, cung cấp cho người tiêu dùng cách cung cấp cho chúng tôi lớp dữ liệu đại biểu sẽ trả lời các câu hỏi mà kiểm soát sẽ hỏi. Tại thời điểm này, kiểm soát là một điều khiển thuần túy. Nó không biết gì về cách bạn có được dữ liệu của bạn. Nó yêu cầu một đối tượng (id) thực hiện một hợp đồng/giao thức. id

@implementation XXTaskBoard 
- (void)setDelegate:(id<XXTaskBoardDelegate>)newDelegate 
{ 
    // the control stores the delegate so it can callback and ask you questions. 
} 

Sau đó, đối với lớp đại biểu, trong tiêu đề tuyên bố bạn thực hiện Nghị định thư đó chính thức và trong các tập tin m thực hiện bạn cung cấp mã.

@interface AppController : NSObject<XXTaskBoardDelegate> 
{ 
    //... 
} 

sau đó, thực hiện nó trong việc thực hiện

@implementation AppController 
- (NSInteger*)getTaskCount 
{ 
    return [model queryTaskCount]; 
} 

- (XXTask*)getTaskForRow:(NSInteger*)rowNumber 
{ 
    return [[model tasks] getItem:(NSInteger*)rowNumber]; 
} 
10

Một đại biểu là một đối tượng mà một lớp khác có thể truyền thông điệp đến. Trong các lớp đại biểu thực hành phải phù hợp với một giao thức đại biểu.

Ví dụ: chúng tôi sẽ lấy một lớp con của bộ điều khiển chế độ xem bảng. Đây là đại biểu cho chế độ xem bảng của bạn. Trước tiên, bạn xác định rằng nó là một bảng điểm đại biểu bằng cách làm này:

MyTableViewController : UITableViewController <UITableViewDelegate> 

này nói rằng lớp MyTableViewController là một lớp con của UITableViewController và phù hợp với các giao thức UITableViewDelegate.

Đặt [tableView setDelegate:self] (hoặc xác định nó như vậy trong IB) sau đó chuyển đối tượng self đến chế độ xem bảng để bảng xem gửi tin nhắn tới đó.

Thông điệp chính gửi đi là thông báo didSelectRowAtIndexPath cho biết lớp học của bạn rằng người dùng đã nhấn một ô xem bảng.

Vì vậy, đối tượng mà có sự kiện nhấp chuột (xem bảng) đi trên thông báo rằng ô đã được bấm vào đối tượng đại biểu (trong trường hợp này là đối tượng MyTableViewController của bạn).

Giao thức ủy quyền tồn tại để bạn có thể đảm bảo rằng đối tượng đại biểu có các phương thức cần thiết để xử lý thư của bạn. Các phương thức trong giao thức đại biểu có thể là @optional hoặc được thực thi. Bất kỳ phương thức nào là tùy chọn không cần phải được xác định. Trong lớp học MyTableViewController, phương pháp didSelectRowAtIndexPath là tùy chọn - bạn không cần phải có. Nếu chế độ xem bảng không tìm thấy phương thức, nó sẽ không gọi nó.

Tuy nhiên, cellForRowAtIndexPath là cần thiết và không có ứng dụng của bạn sẽ không biên dịch.

Tôi hy vọng điều này sẽ giúp và dễ hiểu cho bạn. Nêu bạn cân thêm bât ky thông tin gi nưa thi cho tôi biêt.

3

Đại biểu chỉ là cách nhận được cuộc gọi lại từ một thứ gì đó. Bạn vượt qua một đại biểu (một con trỏ đến một đối tượng phù hợp với một giao thức) để một cái gì đó và khi nó có dữ liệu mới cho bạn hoặc khi một sự kiện xảy ra mà một cái gì đó thực hiện một cuộc gọi phương thức trên đại biểu.

Ví dụ: khi sự kiện xảy ra, như ứng dụng của bạn được đưa vào nền hoặc ứng dụng sắp chấm dứt đối tượng UIApplication sẽ gọi cho ứng dụng của bạn ủy quyền để cho nó biết. Khi một CLLocationManager có một vị trí GPS mới sẽ gọi cho đại biểu của bạn để vượt qua nó vị trí mới. UITableViews gọi các đại biểu của họ để có được UITableViewCells để hiển thị trong bảng. Có rất nhiều cách sử dụng của các đại biểu trong iOS.

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