Video: Apps Phải Có Cho Học Tập (Phần 1) 2025
Một giao thức xác định các bộ phương pháp có thể được thực hiện bởi bất kỳ lớp học nào đối với các ứng dụng iOS. Hãy suy nghĩ về các giao thức như các giao diện định nghĩa mà các lớp học phải thực hiện. Các giao thức thường được sử dụng để xác định giao diện cho các đối tượng uỷ nhiệm. Với tính năng giao thức, bạn có thể tránh phải ép lớp phụ để tạo các lớp đa hình.
Mục tiêu-C (không giống như C ++) không cho phép một lớp có nhiều lớp siêu lớp. Do đó các giao thức là một tính năng quan trọng trong Mục tiêu-C vì nó không cho phép thừa kế nhiều. Khi một lớp thực hiện các phương thức trong một giao thức, lớp được cho là phù hợp với giao thức.
Định nghĩa của một giao thức tương tự như định nghĩa của một giao diện cho một lớp. Tuy nhiên, một giao thức không có các biến lớp cha mẹ hoặc instance. Dưới đây là một ví dụ về định nghĩa giao thức (Printable) từ chương trình máy tính postfix:
@protocol Printable - (void) printMe; / / Tôi có thể để lại ra @ yêu cầu, vì nó là mặc định @ theo mặc định - (NSString *) printMeToString; -d
Với sự xuất hiện (và thực sự với sự phô trương tuyệt vời) của Mục tiêu-C 2. 0, các phương thức giao thức có thể được yêu cầu (mặc định) hoặc tùy chọn. Vì vậy, tôi đã ném các chỉ thị biên dịch vào trộn ở đây là tốt.
@interface StackOfInteger: NSObject … -dĐây là việc thực hiện các giao thức trong lớp StackOfInteger:
@implementation StackOfInteger; … Các phương pháp StackOfInteger khác … /////////// Các phương pháp để thực hiện các giao thức Printable //////////// - (void) printMe {int k, stackCount = [elements count]; NSLog (@ "Stack-> Last>% dlast), cho (k = 0; k% @
Bạn có thể thực hiện phương pháp printMeToString nhưng tùy chọn
Một chương trình có thể kiểm tra liệu một đối tượng có phù hợp với một giao thức hay không. printf ("Testing conformance to protocolsn") ("Sử dụng các phương thức giao thức"); [myStack printMe];} else {NSLog (@ "Đối tượng không phù hợp với giao thức% @ n", @protocol ((Đối tượng không phù hợp với giao thức));} id = "" someObject = [[PostfixCalculator alloc] initWithExpression: @ "44 55 *"]; if (! [SomeObject conformsToProtocol: @protocol (Printable)]) {NSLog (@;}
Bởi vì đối tượng myStack phù hợp với giao thức, các phương thức printMe và printMeToString của nó được gọi.Vì một số đối tượng (đó là id loại để làm cho ví dụ có ý nghĩa hơn) không phù hợp với giao thức Printable, việc kiểm tra sự phù hợp không thành công.
Bạn cũng có thể kiểm tra sự tồn tại của một phương pháp tùy chọn sử dụng phương pháp responsesToSelector. Bạn có thể làm cho một lớp học thông qua một giao thức chỉ đơn giản bằng cách thực hiện các phương pháp được định nghĩa bởi giao thức đó. Đó là, bạn không phải khai báo giao thức trong giao diện của nó. Tuy nhiên, mặc dù lớp thực hiện các phương pháp giao thức, nó
sẽ không phải là được phù hợp với các giao thức và sẽ không kiểm tra phù hợp trước.
