동일한 인수 유형이지만 다른 인수를 사용하는 선택자는 어떻게 다른가요?iOS performSelector : withObject : withObject : really do?
동일한 인수 유형을 가진이 두 개의 선택기가 있습니다.
- (void)methodWithCallBack:(void(^)(void)) cb double:(double)value {
NSLog(@"%s %f", __PRETTY_FUNCTION__, value);
if (cb) {
cb();
}
}
- (void)methodWithDouble:(double)value callBack:(void(^)(void)) cb {
NSLog(@"%s %f", __PRETTY_FUNCTION__, value);
if (cb) {
cb();
}
}
performSelector : withObject : withObject :이 선택기로 호출 할 때 다른 결과가 나타납니다.
[self performSelector:@selector(methodWithDouble:callBack:) withObject:@(2.5) withObject:[^(void){
NSLog(@"Test Call Back Double");
} copy]];
[self performSelector:@selector(methodWithCallBack:double:) withObject:[^(void){
NSLog(@"Test Call Back Double");
} copy] withObject:@(2.5)];
어떻게됩니까? performSelector : withObject : withObject : 실제로 무엇을합니까?
두 가지 방법으로 얻은 두 가지 결과는 무엇입니까? – nayem
이들 메소드 중 어느 것도'peformSelector : withObject : withObject :'와 함께 사용할 수 없습니다. 'peformSelector : withObject : withObject :'는 메소드가 객체 포인터 타입의 두 개의 매개 변수를 가질 것을 요구합니다. 이 두 메소드는 모두 객체 포인터 유형 (특히 블록 포인터)의 매개 변수 하나와 기본 'double'유형의 매개 변수 하나만 가지고 있습니다. 'NSNumber *'에 랩핑하면 마술처럼'double'을 취하는 메서드로 작동하지 않습니다. 메서드가 실제로'NSNumber *'를 취한 경우에만 작동합니다. – newacct
당신이 여기에서 무엇을하려고하는지, 왜 하드 코드 된 선택자로'performSelector'를하고 있는지는 명확하지 않습니다. 그냥 직접 호출 할 수 있습니다. – newacct