Tôi đang nghiên cứu một số khái niệm cơ bản về giao thức không chính thức và giao thức thực. Điều làm tôi bối rối là, Cocoa dường như sử dụng rất nhiều giao thức không chính thức trên NSObject. Các giao thức không chính thức này là các loại trên NSObject khai báo các phương thức, nhưng không thực sự thực hiện chúng. Theo như tôi hiểu đúng, lý do duy nhất họ sử dụng các giao thức không chính thức (nói cách khác, các danh mục trên NSObject không cung cấp phương pháp triển khai phương pháp), là đưa ra gợi ý tự động hoàn thành trong Xcode.Sự khác nhau giữa việc sử dụng giao thức không chính thức trên NSObject hoặc giao thức với các phương thức tùy chọn là gì?
Một ví dụ là phương thức -awakeFromNib được định nghĩa trong NSNibLoading.h, là giao thức không chính thức trên NSObject. Hệ thống tải nib kiểm tra thời gian chạy nếu một đối tượng thực hiện phương thức đó. Nếu có, thì nó gọi nó.
Nhưng bây giờ, hãy tưởng tượng không có tính năng nào được gọi là giao thức không chính thức. Phương án thay thế có cùng tác dụng chính xác sẽ là một khai báo @protocol thực sự khai báo phương thức tùy chọn -awakeFromNib. NSObject sẽ chỉ chấp nhận giao thức đó và trình biên dịch sẽ vui vẻ cung cấp tự động hoàn thành.
Có ai có thể chỉ ra sự khác biệt lớn giữa hai chiến lược này không? Tôi không thấy điểm giao thức không chính thức nhưng thực sự muốn làm như vậy.
Tôi hiểu. Các giao thức không chính thức đến từ quá khứ mà không có phương thức giao thức tùy chọn nào. Điều này có ý nghĩa. –
Tôi đã cập nhật câu trả lời của mình cũng nêu rõ rằng các giao thức không chính thức là một sản phẩm của di sản. – PeyloW