프로 토 콜 에 속성 을 추가 할 수 있 습 니까?

네, 일반적으로 사용 하 는 장 소 는 A 와 B 두 가지 유형 이 있 는데 A 와 B 가 상속 관계 가 아니라면 A 와 B 에 게 똑 같은 속성 을 몇 개 추가 하려 면 하나의 협의 C 를 실현 하고 속성 을 추가 한 다음 에 A 와 B 가 모두 C 협 의 를 따 르 도록 하면 됩 니 다.물론 프로 토 콜 에 서 는 속성 만 밝 혔 을 뿐 A 와 B 에 서 는 다음 setter 와 getter 방법 을 수 동 으로 실현 해 야 합 니 다.
프로 토 콜 에서 방법 과 속성 을 설명 할 수 있 습 니 다.그리고 문제 가 생 겼 습 니 다. 멤버 변 수 를 정의 할 수 없 지 않 습 니까?
네, 구성원 변 수 를 정의 할 수 는 없 지만 속성 은 무엇 입 니까?속성 은 세 가 지 를 포함 합 니 다: 구성원 변수, setter 방법, getter 방법.클래스 에서 정 의 된 속성 은 물론 세 가지 가 있 습 니 다. 그러나 프로 토 콜 에서 정 의 된 속성 은 가 져 오기 와 설정 방법 만 있 고 구성원 변수 가 없습니다. 이 프로 토 콜 을 지 키 는 사람 은 setter 와 getter 방법 을 스스로 써 야 합 니 다.그러나 필요 하지 않 은 경우 가 있 습 니 다. 바로 준수 자 는 원래 이 속성 이 있 습 니 다. 이때 시스템 은 이 속성 을 위해 자동 으로 설정 획득 방법 을 생 성 합 니 다. 이미 실현 되 었 으 니 준수 자 는 협의 중의 이 속성 을 실현 할 필요 가 없습니다.
비록 '위조 속성' 을 실현 할 수 있 지만, 우 리 는 가능 한 한 속성 을 메 인 인터페이스 에 정의 해 야 하 며, 협의 에 정의 해 서 는 안 된다.
그리고 중요 한 것 은 왜 사용자 정의 프로 토 콜 뒤에 이런 것 이 있 습 니까?
합의 도 물 려 받 을 수 있다.사용자 정의 프로 토 콜 도 계승 할 수 있 고 시스템 프로 토 콜 도 계승 할 수 있다.우 리 는 협 의 를 정의 할 때 보통 직접 계승 하 는데 왜 시스템 은 협 의 를 이 협의 에서 계승 하 는 것 을 묵인 해 야 합 니까?
이 협의 에서 기본 적 인 방법 을 정 의 했 기 때문에 우리 가 사용 하 는 모든 종 류 는 NSObject 라 는 기 류 를 계승 하기 때문에 이 기 류 는 이 협 의 를 지 켰 기 때문에 그 중의 방법 들 을 실현 했다. 이런 방법 들 은 당연히 NSObject 와 그 하위 대상 에서 호출 할 수 있 지만 준수 자의 유형 을 모 를 때 id 와 같은 지침 을 사용 해 야 한다.이 지침 은 컴 파일 기간 에 자신 이 어느 대상 을 가리 키 는 지 모 르 고 호출 할 수 있 는 유일한 방법 은 협의 중의 방법 입 니 다. 그러나 가끔 은 기본 적 인 방법 을 사용 해 야 합 니 다. 예 를 들 어 id 라 는 지침 이 가리 키 는 대상 이 어느 유형 에 속 하 는 지 판별 하려 면 - isMemberOf: 이 방법 을 사용 해 야 합 니 다. 이 방법 은 이 협의 중의 방법 중 하나 이기 때문에...우리 가 정의 한 협 의 는 모두 계승 해 야 한다.이 단락 은 처음부터 '중의 방법 은 NSObject 기본 클래스 에서 이 루어 졌 으 니 더 이상 실현 에 관심 을 가지 지 말고 직접 호출 하 는 방법' 이 라 고 말 했다.
주의해 야 할 문제
약속 에 따 르 면 프레임 에 Delegate 라 는 접 두 사 는 모두 Protocol 입 니 다. 예 를 들 어 UIApplicationDelegate, UIWebView Delegate 등 입 니 다.Protocol 자 체 는 계승 할 수 있 습 니 다. 예 를 들 어:
@protocol A
    -(void)methodA;
@end
@protocol B -(void)methodB;
@end

만약 당신 이 B 를 실현 하려 면 methodAmethodB 모두 실현 해 야 합 니 다.
Protocol 은 어떤 종류 와 도 상 관 없 이 모든 종류 가 정 의 된 Protocol 을 실현 할 수 있 습 니 다. 만약 에 우리 가 어떤 종류 가 특정한 Protocol 을 실현 하 였 는 지 알 고 싶다 면 우 리 는 conformsToProtocol: 방법 으로 판단 할 수 있 습 니 다.
[obj conformsToProtocol:@protocol(ProcessDataDelegate)]

좋은 웹페이지 즐겨찾기