2010-06-21 38 views

Trả lời

56

Từ Official Documentation

chính thức và không chính thức Giao thức

Có hai loại giao thức, chính thức và không chính thức:

  • Một thức giao thức là một phạm trù trên NSObject, mà hoàn toàn làm cho hầu như tất cả các đối tượng chấp nhận giao thức. (Danh mục là tính năng ngôn ngữ cho phép bạn thêm phương thức vào một lớp học mà không cần phân lớp nó.) Thực hiện các phương thức trong giao thức không chính thức là tùy chọn. Trước khi gọi phương thức, đối tượng gọi kiểm tra để xem cho dù đối tượng mục tiêu có thực hiện nó hay không. Cho đến khi các phương thức giao thức tùy chọn được giới thiệu trong các giao thức không chính thức của Mục tiêu-C 2.0, là cần thiết để cách các lớp Foundation và AppKit thực hiện ủy quyền.

  • Giao thức chính thức tuyên bố danh sách các phương thức mà lớp khách hàng sẽ được triển khai. Các giao thức chính thức của có tuyên bố riêng, việc chấp nhận và cú pháp kiểm tra loại. Bạn có thể chỉ định các phương thức có yêu cầu thực hiện hoặc tùy chọn với các từ khóa @required và @optional . Các lớp con kế thừa các giao thức chính thức được tổ tiên của chúng chấp nhận. Một giao thức chính thức cũng có thể áp dụng các giao thức khác.

Giao thức chính thức là phần mở rộng cho ngôn ngữ mục tiêu-C.

+1

vì vậy "giao thức không chính thức" chỉ là một tên khác cho thể loại? – Stas

+6

tài liệu của apple là khủng khiếp so với google. –

+3

@JohnDoe vey đồng ý nhiều, tài liệu táo là kẻ giết người. –

2

Ngôn ngữ mục tiêu-C cung cấp cách chính thức khai báo danh sách các phương pháp (bao gồm cả thuộc tính đã khai báo) làm giao thức. Các giao thức chính thức được hỗ trợ bởi ngôn ngữ và hệ thống thời gian chạy. Ví dụ, trình biên dịch có thể kiểm tra các loại dựa trên các giao thức và các đối tượng có thể quan sát trong thời gian chạy để báo cáo liệu hay không chúng tuân theo một giao thức.

11

chính thức Nghị định thư: Category (Triển khai là bắt buộc)

chính Nghị định thư: Extension (Triển khai là bắt buộc và cần thiết)

+0

Triển khai phương pháp danh mục có phải là tùy chọn không? Tôi không nghĩ như vậy, bởi vì tôi nhận xét một phương pháp thực hiện và ngay lập tức tôi có thể thấy lỗi "Phương pháp định nghĩa cho 'xxxmethod' là mất tích". Xxxmethod được khai báo trong tập tin .h. – selva

+1

Cách đơn giản nhất để mô tả sự khác biệt. – Warewolf

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