2014-05-12 4 views
0

나는 다음과 같은 방법이 있습니다선택기를 매개 변수로 사용하는 메서드를 정의하는 방법에 문제가 있습니까?

- (void) broadcastSelector:(SEL)selector { 
    for (id listener in [self listeners]) { 
     if([listener respondsToSelector:@selector(selector)]) { 
      [listener performSelector:@selector(selector)]; 
     } 
    } 
} 

을 그리고 나는 다음과 같은 방법으로 전화 해요 :

[self broadcastSelector:@selector(onLoginRequestStarted)]; 

을 그리고 그것은 작동하지 않습니다. 나는 다음과 같은 방법으로 셀렉터를 하드 코딩하는 경우

:

- (void) broadcastSelector:(SEL)selector { 
    for (id listener in [self listeners]) { 
     if([listener respondsToSelector:@selector(onLoginRequestStarted)]) { 
      [listener performSelector:@selector(onLoginRequestStarted)]; 
     } 
    } 
} 

모든 것이 잘 작동 내 혼란은 다음과 같다. 그래서 나는 메소드를 호출하는 방법이나 매개 변수를 정의하는 방법에 문제가 있다고 가정하고 있습니다.

답변

3

나는 당신이 당신의 루프 내부의 선택을 두 번 인코딩 것 같아요. 이것을 시도하십시오 :

if([listener respondsToSelector:selector]) { 
    [listener performSelector:selector]; 
} 
+0

만약 제가 그렇게하면 'PerformSelector는 셀렉터가 알려지지 않았기 때문에 누수가 발생할 수 있습니다.'라는 경고를 받게됩니다. 나는 그것을 무시해야합니까? – tambykojak

+0

하지만 효과가 있습니다. 감사합니다. – tambykojak

+1

흥미롭게도 실제로 이런 유형의 코드를 작성하지 않아서이 경고에 대해 알지 못했습니다. 나는 [이 다른 대답] (http://stackoverflow.com/a/20058585/795339)이 경고를 피하는 대안과 대안을 제공한다고 생각한다. –