IT박스

방법이 존재하는지 확인

itboxs 2020. 8. 3. 08:38
반응형

방법이 존재하는지 확인


Objective-C에 메소드가 있는지 테스트 할 수있는 방법이 있습니까?

호출하기 전에 객체에 메소드가 있는지 확인하기 위해 가드를 추가하려고합니다.


if ([obj respondsToSelector:@selector(methodName:withEtc:)]) {
   [obj methodName:123 withEtc:456];
}

정적 메시지 인스턴스 도 있습니다 .RespondToSelector : (SEL) 선택기 다음과 같이 호출합니다.

[MyClass instancesRespondToSelector:@selector(someMethod:withParams:)]

또는 이와 같이 :

[[myObject class] instancesRespondToSelector:@selector(someMethod:withParams:)]

이것은 이것에 따라 하나의 생성자 또는 다른 생성자를 호출하려는 경우 유용 할 수 있습니다 (인스턴스 자체를 갖기 전에 의미합니다).


사용하십시오 respondsToSelector:. 로부터 문서 :

respondsToSelector :

수신자가 지정된 메시지에 응답 할 수있는 메소드를 구현 또는 상속하는지 여부를 나타내는 부울 값을 리턴합니다.

- (BOOL)respondsToSelector:(SEL)aSelector

매개 변수
aSelector- 메시지를 식별하는 선택기입니다.


YES수신자가 aSelector에 응답 할 수있는 메소드를 구현하거나 상속하는 경우 리턴 값 , 그렇지 않으면 리턴 값NO .


respondsToSelector를 찾고 있습니다 : -

if ([foo respondsToSelector: @selector(bar)] {
  [foo bar];
}

으로 DONAL 말한다 위에서 푸 수 있음을 알려줍니다 확실히 바 선택기를 수신 처리합니다. 그러나 foo가 bar 메시지를 수신 할 기본 오브젝트로 bar를 전달하는 프록시 인 경우, 메시지가 bar에 응답하는 오브젝트로 전달 되더라도 respondsToSelector :는 NO를 알려줍니다.


respondsToSelector로 선택자를 확인하는 것은 일반적으로 대리자 메서드에만 해당됩니다. 대리자 메서드에 forwardInvocation 또는 프록시를 사용해서는 안됩니다. 다른 상황에서 respondsToSelector를 사용해야하는 경우 프로그램을 설계하는 데 더 적합한 방법이 없는지 확인하고 싶을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/2732863/check-if-a-method-exists

반응형