类型相同但参数排序不同的选择器之间有什么区别?
我得到了这两个具有相同参数类型的选择器。
- (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: 到底是做什么的?
@(2.5)是什么。 NSNumber
文字是@2.5。双精度是非对象,NSNumber
是对象。你应该通过一个NSNumber
.
第二点:我觉得苹果创造了performSelector:withObject:withObject:
很奇怪。实际上,一个"withObject
"就足够了,你只需传递一个带有你想要传递给它的对象的NSArray
。
例如。
NSNumber *var1 = @2.5;
NSString *yourMom = @"Sally";
NSArray *params = [NSArray arrayWithObjects:var,yourMom,nil];
[self performSelector:@selector(goMethod:) withObject:params];