2010-04-24 6 views
2

나는 [self delegate]을 통해 얻을 수있는 객체에 대한 메소드를 호출하려고합니다. 클래스를 가져 와서 정상적으로 호출 할 수 있도록 클래스가 무엇인지 알지만 내 클래스를 가져올 필요가없는 performSelector:을 사용할 수도 있습니다. 메서드에 매개 변수를 전달할 필요가 없습니다. 그리고 예, 나는 this을 읽었습니다. 이 경우 어느 쪽이 바람직합니까?performSelector를 사용해야합니까? 또한 메서드를 정상적으로 호출 할 수 있습니까?

답변

2

직접 메서드를 호출하면 더 쉽게 읽을 수 있습니다. performSelector:은 더 높은 주문 메시지가 필요할 때 예약해야합니다.

엄밀히 말하면, 메시지 발송은 정적이 아니라 동적이기 때문에 클래스를 가져올 필요가 없습니다. 객체가 선택기에 응답하지 않을 수 있다는 컴파일 타임 경고가 표시됩니다.

+0

클래스를 가져 와서 직접 메시지를 보내는 것이 컴파일 시간 유형/인터페이스 정의 검사이며 outis에서 설명한 것보다 효율적입니다. performSelector는 일반적으로 대상 클래스에 대해 알지 못하는 제네릭 클래스에 사용되며 메서드가 있는지 확인하기 위해 프로그래머에게 의존합니다. 즉, UITimer, UIButton 등. – gnasher

+0

또한 런타임 오류가 발생하면 해당 대상에서'- (BOOL) respondsToSelector : @selector (mySelector)'를 호출하여 특정 선택기에 대한 응답을 확인할 수 있음을 언급해야합니다. – katzenhut

0

일반적으로 performSelector:과 같은 반사 작업은 직접 작업보다 효율적이지 않습니다. 나는 objC에 익숙하지 않다는 것을 인정해야한다.

관련 문제