나는 현재 objc_msgSend
을 사용하여 객체 컬렉션에서 그러한 selector를 호출한다. 거기에 더 좋은 방법이 있습니까? 여기 내 코드입니다 :스칼라 인자를 가진 Invoke selector
@protocol ADelegateProtocol {
-(void) timeToEventOneDidChange:(NSInterval) event1;
-(void) timeToEventTwoDidChange:(NSInterval) event1;
}
- (void) delegatesPerformSelector:(SEL) selector withTimeIntervalAsFristParameter:(NSTimeinterval) timeInterval {
for (id<ADelegateProtocol> delegate in delegates) {
if([delegate respondsToSelector:selector]) {
objc_msgSend(delegate, selector, timeInterval);
}
}
}
선택기는 매개 변수로 전달되고, timeInterval
가 아닌 객체의 값입니다.
참고 : KVO를 사용하고 싶지 않습니다.
은 선택이 매개 변수로 전달되는 추가 질문을 수정하세요.. 그것은 큰 차이를 만듭니다. – taskinoor
전화를 걸고 싶은 방법을 변경하지 않으면 정말 좋아질 것이라고 생각하지 않습니다. 'NSInvocation'은 더 지루합니다. –
뭔가를 놓친다면 용서해주세요. 그러나이 코드는이 메서드에 전달 된 선택기가 인수로'timeInterval'을 사용한다고 가정합니다. 인수가 어떤 것인지 알면 왜 선택자가 될지 알 수 없습니까? 예를 들어, 선택자'forBar :'가 전달 될 수 있는데,'NSTimeInterval'을 인수로 사용합니다. 그러나'fooBaz :'를 문자열로 사용하면'respondsToSelector'는 여전히 true를 반환하지만, 문자열이 예상되어 충돌을 일으키는 시간 간격 ... – Jasarien