iOS 什么 performSelector:withObject:withObject: 真的做


参数

类型相同但参数排序不同的选择器之间有什么区别?

我得到了这两个具有相同参数类型的选择器。

- (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];

最新更新