방법이 존재하는지 확인
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
'IT박스' 카테고리의 다른 글
| ActiveMQ는 무엇에 사용됩니까? (0) | 2020.08.03 |
|---|---|
| java.lang.NoClassDefFoundError : Java 메일 용 JUnit 테스트 케이스의 경우 com / sun / mail / util / MailLogger (0) | 2020.08.03 |
| SQL-하나의 쿼리에서 여러 레코드 업데이트 (0) | 2020.08.03 |
| 데이터 정렬의 잘못된 혼합 MySQL 오류 (0) | 2020.08.03 |
| 파이썬에서 목록에서 중복 dict 제거 (0) | 2020.08.03 |