@protocol 내에서 Object 메소드를 사용하고 있지만 프로토콜은 메소드 선언 만 지원하므로 다른 메소드와 동일한 메소드의 메소드 정의를 연결하는 방법에 대한 도움을받을 수 있습니다. (메소드 정의를 작성하는 곳).프로토콜의 메소드 정의
0
A
답변
1
프로토콜은 메소드 선언이없는 이행. 그것들은 가능한 (클래스) 세트를 특정 프로토콜을 구현하는 클래스로 제한하는 데 사용될 수 있습니다.
예를 들어 GasStation
클래스가있는 경우 스테이션에서 급유 할 수있는 물체의 종류 (클래스)를 제한 할 수 있습니다. 물론 당신은 단순히 같은 클래스 Vehicle
의 후손으로 개체를 요구할 수 :
@interface GasStation : NSObject
- (void)refuel:(Vehicle *)vehicle;
@end
@implementation GasStation
- (void)refuel:(Vehicle *)vehicle {
[vehicle addFuel:100];
}
@end
그러나 이것은 jerrycan가 예를 들어 가득 할 수 있도록하지 않을 것입니다. 그러나 모든 유형의 객체가 전달되도록 허용하는 것은 나쁜 아이디어입니다. Cat
의 인스턴스를 전달한 경우 addFuel:
메시지를 보내려고하면 오류가 발생하기 때문입니다.
@interface GasStation : NSObject
- (void)refuel:(NSObject<RefuelableThing> *)thing;
@end
Vehicle
됩니다
@protocol RefuelableThing
@required
- (void)addFuel:(float)fuel;
@end
이제 급유 할 수있는 개체의 유형을 제한하기 위해 해당 프로토콜을 사용할 수 있습니다
그래서 대신에 당신은 refuelable 클래스가 구현해야하는 프로토콜을 정의 물론 addFuel:
방법을 가지고 있으므로 Vehicle
이 아니더라도 JerryCan
은 별도의 버전을 구현할 수 있습니다.
0
프로토콜을 선언하면이를 준수하는 모든 클래스가 해당 프로토콜의 메서드를 구현할 수 있습니다. 프로토콜이 선언 된 헤더를 가져 와서 해당 클래스의 인터페이스에 프로토콜을 추가하고 주제를 읽는 .m의 메소드를 구현하는 것이 좋습니다. btw
관련 문제
- 1. Clojure 멀티 메소드 및 프로토콜의 일반적인 문제점은 무엇입니까?
- 2. iOS 프로토콜의 @property 구현 방법
- 3. 프로토콜의 속성 값 액세스?
- 4. 사용자 지정 프로토콜의 XMPP 오류
- 5. 레일 정의 메소드
- 6. Contract.Ensures의 사용자 정의 메소드
- 7. 파이썬 정의 메소드
- 8. ContentProvider의 사용자 정의 메소드
- 9. 메소드 내에서 변수 및 메소드 정의 Javascript?
- 10. Tshark - 사용자 정의 프로토콜의 데이터 만 표시 할 수 없음
- 11. 중복 프로토콜 정의 경고가 있지만이 프로토콜의 배수가 필요합니다.
- 12. 사용자 정의 프로토콜의 메소드가 iphone SDK에서 호출하지 않습니다.
- 13. modbus 프로토콜의 코일 읽기
- 14. FTP 프로토콜의 이스케이프 문자
- 15. AMQP 프로토콜의 RabbitMQ 구현
- 16. HTTP 프로토콜의 본질
- 17. 무선 프로토콜의 이름이 802.11
- 18. RARP 프로토콜의 응용
- 19. 무국적 프로토콜의 반대?
- 20. IPv4 프로토콜의 문제
- 21. 잠재적으로 단순한 목표 C 프로토콜의 버그
- 22. 사용자 정의 TableModel의 removeRow() 메소드
- 23. VHDL의 레코드에 대한 메소드 정의
- 24. 선언에서 메소드 정의 자동 작성
- 25. UIVIewController 사용자 정의 init 메소드
- 26. Thread로 사용자 정의 메소드 실행하기
- 27. 처음에는 UDP를 사용하는 프로토콜의 예입니다.
- 28. REST와 HTTP 프로토콜의 차이점은 무엇입니까?
- 29. net.tcp와 TCP 프로토콜의 차이점은 무엇입니까?
- 30. Objective c - 프로토콜의 부모리스트를 얻는다.
여기 몇 가지를 혼란스럽게 생각합니다. 메소드 * 구현 *을 어디에 둘 것인지요? – DrummerB
프로토콜 사용법을 이해하려면 ['protocol documentation'] (http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/chapters/ocProtocols.html)을 읽어보십시오. . – Joe
'@class';를'@proxy' 선언 위에 놓습니다. – basvk