2010-10-20 35 views
8

Tôi đã đọc tài liệu nhưng tôi vẫn còn bối rối. Ai đó có thể vui lòng giải thích một giao thức là gì? (Bạn có thể đưa ra các ví dụ về mã nhưng tôi thực sự đang tìm kiếm giải thích)Giao thức là gì?

Trả lời

11

Here's a great article on it. Có hiệu quả, một giao thức trong Objective-C rất giống với một giao diện trong Java hoặc một lớp ảo thuần túy trong C++ (mặc dù không chính xác như các lớp ảo thuần túy có thể có các thành viên dữ liệu ...). Về cơ bản nó là một đảm bảo rằng một lớp cụ thể biết làm thế nào để đáp ứng với một tập hợp các phương thức (tin nhắn) đã cho.

Chỉnh sửa Bài viết gốc đã biến mất nên tôi đã thay thế nó bằng một hướng dẫn khác.

+3

Đó là đảm bảo trừ khi giao thức xác định các phương thức tùy chọn. Trong trường hợp đó bạn vẫn phải kiểm tra xem phương thức này có được triển khai hay không. Giao thức –

+0

cũng có thể có các thuộc tính. –

+0

Chỉ muốn chỉ ra cho Người kiểm duyệt liên kết đã chết. – Alix

4

Giao thức là phương tiện để xác định danh sách các phương thức bắt buộc và/hoặc tùy chọn mà lớp học triển khai. Nếu một lớp thông qua một giao thức, nó phải thực hiện tất cả các phương thức được yêu cầu trong các giao thức mà nó sử dụng. Ca cao sử dụng các giao thức để hỗ trợ truyền thông interprocess thông qua các thông điệp mục tiêu-C. Ngoài ra, vì Objective-C không hỗ trợ đa kế thừa, bạn có thể đạt được chức năng tương tự với các giao thức, vì một lớp có thể áp dụng nhiều giao thức.

Ví dụ điển hình về giao thức là NSCoding, có hai phương thức được yêu cầu mà lớp phải triển khai. Giao thức này được sử dụng để cho phép các lớp được mã hóa và giải mã, tức là lưu trữ các đối tượng bằng cách ghi vào bộ nhớ vĩnh viễn.

@protocol NSCoding 

    -(void)encodeWithCoder:(NSCoder *)aCoder; 

    -(id)initWithCoder:(NSCoder *)aDecoder; 

    @end 

Để áp dụng một giao thức, kèm theo tên của giao thức trong <> như dưới đây

@interface SomeClass : NSObject <NSCoding> 

    { 
    some variables 
    } 

Làm thế nào để xác định một Nghị định thư?

Chúng tôi có thể tạo cả hai yêu cầu một phương thức tùy chọn trong giao thức. Sau đây là một definion của một giao thức có tên là 'Hello':

@protocol Hello 
    - (BOOL)send:(id)data; 
    - (id)received; 
    @optional 
    - (int)progress; 
    @end 

Để sử dụng giao thức, như với ví dụ trên, kê khai các giao thức trong giao diện và viết các phương pháp cần thiết trong việc thực hiện lớp:

// Interface @ interface AnotherClass: NSObject

{ 
    some declaration 
    } 

// Thực hiện @implementation AnotherClass

- (BOOL)send:(id)data 
    { 
    some declaration 
    } 

    - (id)received 
    { 
    some code 
    } 

// phương pháp bắt buộc

- (int)progress 
    { 
    some code 
    } 
    @end 

Tôi hy vọng nó sẽ giúp bạn tìm hiểu Nghị định thư.

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