2012-06-06 9 views
3

사용자 지정 대리자 RandomClassDelegateRandomClass.mRandomClass.h에 구현했습니다. 지금은 대리인 변수를 구현해야하고, 다음과 같이이 프로토콜의 메소드를 호출 할 수 있습니다사용자 지정 대리인이 설정되었는지 확인하는 방법은 무엇입니까?

[self.delegate randomClassDelegateMethod]; 

을 분명히 delegate가 설정되지 않을 경우,이 프로그램을 중단하고 실행을 일으킬 것입니다 시간 오류. 확실한 해결책은 할 수 있습니다 :

if (delegate) 
{ 
[self.delegate randomClassDelegateMethod]; 
} 

을하지만이 올바른 패턴이 궁금하거나하고있어 어쩌면 프로토콜 또는 다른 곳에서이 작업을 할 수있는 더 좋은 방법이 있는지?

+0

위임자가 설정되어 있지 않고 nil 인 경우에도 아무 메시지도 보낼 수 있습니다. –

답변

7

당신은 대리인이 유효한지 확인하기 위해 -respondsToSelector:를 사용한다 : 당신이 전무 객체에 메시지를 보낼 수

if ([delegate respondsToSelector:@selector(myDelegateMethod)]) 
    [delegate myDelegateMethod]; 

nil 검사에 대해 걱정하지 마십시오 그것은 아무것도 할 것입니다.

+1

Richard가 맞습니다. Objective-c에서는 아무런 결과없이 메시지를 보낼 수 있습니다. 이것은 정확하고 관용적 인 사용법입니다. 객체가 생성 될 때 모든 인스턴스 변수 객체 포인터가 nil로 초기화되기 때문에 아직 설정되지 않은 인스턴스 변수에 메시지를 보내는 것이 좋습니다. – Philip

0

비어 있지 않고 구현 된 대리자를 확인하십시오.

if(delegate && [delegate respondsToSelector:@selector(randomClassDelegateMethod)]) { 
    [delegate randomClassDelegateMethod]; 
} 
+1

일반적으로 respondsToSelector인지 확인하기에 충분합니다. 그것의 nil도 어떤 selector에도 반응하지 않는다;) –

관련 문제