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