어제 한 동료가 초기화 메소드 (initWith ... : (...))를 선언해서는 안된다는 질문을 던졌습니다. 나는 그 질문에 대해 꽤 놀랐다. 그리고 나의 이해에서 이것은 말도 안되는 것이다. 하지만 확실한 이유는 찾을 수 없지만 프로토콜에서 init 메소드를 선언하면 구현에 유연성이 떨어집니다.목적 코드 초기화
프로토콜에 init 메소드가 있어야하는 이유는 무엇입니까?
감사합니다.
어제 한 동료가 초기화 메소드 (initWith ... : (...))를 선언해서는 안된다는 질문을 던졌습니다. 나는 그 질문에 대해 꽤 놀랐다. 그리고 나의 이해에서 이것은 말도 안되는 것이다. 하지만 확실한 이유는 찾을 수 없지만 프로토콜에서 init 메소드를 선언하면 구현에 유연성이 떨어집니다.목적 코드 초기화
프로토콜에 init 메소드가 있어야하는 이유는 무엇입니까?
감사합니다.
코드를 다른 사람이 구현 한 메서드를 호출 할 수 있도록 프로토콜에 메서드를 정의합니다.이
프로토콜의 메서드를 호출하려면 해당 프로토콜의 인스턴스를 구현해야합니다. 프로토콜을 정의하는 전체 요점은 프로토콜에서 구현하는 클래스에 대한 지식을 코드에서 제거하는 것입니다. 어떤 클래스를 사용하는지 알면 프로토콜을 건너 뛰고 클래스에 직접 프로그래밍 할 수도 있습니다. 그러나 init
으로 전화하려면 해당 클래스를 알아야합니다. 그렇지 않으면 다른 사람이 이 아직 호출되지 않은 alloc
-ed 개체를 전달해야합니다. 첫 번째 방법은 프로토콜을 사용하는 목적을 없애고 두 번째 방법은 호출자가 부분적으로 초기화 된 객체를 처리하도록합니다.
init
구성 방법을 가지고에서 당신을 방지하지 않습니다 참고 : 모든 개체 정보의 특정 비트를 사용하여 구성해야하는 경우, 사용자가 원하는대로 init
을 구현하자와에 configureWith:...
방법을 추가 사용자의 프로토콜 인 init
메소드에 대해 알지 못해도 객체 구성 프로세스를 제어 할 수 있습니다.
init ... 메소드가있는 iOS SDK의 일부 프로토콜을 알고 있습니다. 예를 들어 NSCoding Protocol에는 - initWithCoder : 필수 메소드가 있습니다. 나는 그것이 정상적인 연습이라고 생각한다.
그렇지 않으면 정상적인 연습이 될 수 있습니까? ** 다른 사람이 ** 인터페이스를 구현하는 개체를 만듭니다. ** ** **? – SeriousBob
@SeriousBob 오브젝트를 작성하면 오브젝트의 유형과 구현되는 모든 프로토콜을 알 수 있습니다. 이 경우'init' (또는 그 밖의 다른 메소드)가 프로토콜의 일부라는 사실을 알면 더 이상 필요하지 않습니다. – dasblinkenlight
좋아요, 왜 NSCoding 프로토콜에 initWithCoder : 메소드가 있습니까? – SeriousBob