비디오: iOS의 꽃, 테이블뷰 2025
정의에 따라 프로토콜은 iOS 앱의 모든 클래스에서 구현할 수있는 메소드 세트를 명확히합니다. 프로토콜은 클래스에 의해 구현 된 인터페이스를 정의하는 데 사용됩니다. 프로토콜은 종종 위임 객체의 인터페이스를 지정하는 데 사용됩니다. 프로토콜 기능을 사용하면 다형성 클래스를 작성하기 위해 서브 클래 싱을 강제하지 않아도됩니다.
Objective-C (C ++과 달리)는 클래스가 여러 수퍼 클래스를 가질 수 없도록합니다. 프로토콜은 다중 상속을 허용하지 않기 때문에 Objective-C에서 필수적인 기능입니다.
이 클래스는 에 말했다되는 프로토콜에> 을 준수합니다. 프로토콜의 정의는 클래스의 인터페이스 정의와 유사합니다. 그러나 프로토콜에는 상위 클래스 나 인스턴스 변수가 없습니다. 여기서 접미사 계산기 프로그램 프로토콜 정의 (인쇄)의 예:
인쇄용 @protocol - (공극)가 printMe; 이 기본 @optional이기 때문에 // 나는, @Required 생략 할 수 있습니다 - (있는 NSString *) printMeToString; -d
2. 0 프로토콜 방법이 요구 될 수 있습니다 오브젝티브 C (디폴트) 또는 임의의 (큰 요란 참과) 함께 도착. 컴파일러 지시어도 여기에 있습니다.
@interface StackOfInteger: NSObject … -d
StackOfInteger 클래스의 프로토콜 구현은 다음과 같습니다.
@implementation StackOfInteger; … StackOfInteger 다른 방법은 … /////////// 방법은 인쇄 프로토콜 //////////// 구현 - (무효) printMe {INT의 K를 stackCount = 요소 개수]; printMeToString 메서드는 선택 사항이므로 구현되지 않았습니다.
프로그램은 객체가 프로토콜을 따르는 지 여부를 테스트 할 수 있습니다. 다음 코드에는이 테스트의 예제가 포함되어 있습니다 (샘플의 주 프로그램에서 가져옴):printf (myStack printMe);} else {NSLog (@ "객체가 프로토콜 % @ n을 따르지 않습니다.", "NSLog (@"객체가 다음을 준수하지 않습니다: @protocol (Printable));} id someObject = [[PostfixCalculator alloc] initWithExpression: @ "44 55 *"] 프로토콜 ") 상기 myStack 오브젝트 프로토콜에 부합하므로}
및 그 printMe printMeToString 메소드가 호출된다.someObject (예제를 더 의미있게 만드는 유형 ID)가 Printable 프로토콜을 따르지 않으므로 적합성 테스트가 실패합니다.
respondsToSelector 메소드를 사용하여 선택적 메소드의 존재 여부를 테스트 할 수도 있습니다.클래스는 프로토콜에 정의 된 메소드를 구현함으로써 프로토콜을 채택 할 수 있습니다. 즉, 인터페이스에서 프로토콜을 선언 할 필요가 없습니다. 그러나, 클래스가 프로토콜 메소드를 구현하더라도, 프로토콜을 따르지 않고 (999), 선행 적합성 테스트를 실패 할 것이다.
