Ios 如何将多个对象传递给延迟的方法?

Ios 如何将多个对象传递给延迟的方法?,ios,objective-c,xcode,cocos2d-iphone,Ios,Objective C,Xcode,Cocos2d Iphone,我怎么通过 -(void)explosionFromPoint:(CGPoint)带sprite:(CCSprite*)sprite的explosionPoint 在一个 [self-performSelector:@selector(//此处右侧)with object:nil afterDelay:3] 您不能将整个选择器放入@selector(),而withObject首先只允许传递一个对象,我也不知道如何使用它 延迟之后,如何传递对象的方法? 我还尝试了一个解决办法,我打电话给 [自执行

我怎么通过

-(void)explosionFromPoint:(CGPoint)带sprite:(CCSprite*)sprite的explosionPoint

在一个

[self-performSelector:@selector(//此处右侧)with object:nil afterDelay:3]

您不能将整个选择器放入
@selector()
,而
withObject
首先只允许传递一个对象,我也不知道如何使用它

延迟之后,如何传递对象的方法? 我还尝试了一个解决办法,我打电话给

[自执行选择器:@selector(waitExplosion)with object:nil afterDelay:3]
然后运行动作本身,
[self explosionFromPoint:c0tilecord with prite:bomb];
,但这是一种非常糟糕的方法,因为我必须重新声明变量,这很糟糕


如何在延迟后传递带有对象的方法?

您可以在延迟后使用dispatch\u

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self explosionFromPoint:aPoint withSprite:sprite]; 
});
其中aPoint和sprite在块外定义。

根据。对于您的情况,您可以使用NSObject的另一种方法。即

-(id)performSelector:(SEL)一个带object:(id)object1和object:(id)object2的选择器


但不幸的是,在这种方法中,您不能给出延迟。

如果您想使用性能选择器将多个参数传递给一个方法:,请将所有参数保留在
NSArray
NSDictionary
中,然后像这样传递该数组/字典

  [self performSelector:@selector(testWith:) withObject:array afterDelay:3];  
编辑

  NSArray *array =[NSArray arrayWithObjects:@"arg1",@"arg2"];
 [self performSelector:@selector(testWith:) withObject:array afterDelay:3];


 -(void)testWith:(NSArray *)array
 {

   NSString * arg1 =[array objectAtIndex:0];// first argument
   NSString *arg2 = [array objectAtIndex:1];// second argument
   // do other stuff
 }

另一种方法是将
NSArray
NSMutableArray
作为参数传递给方法。 例如:

NSString *firstItem = @"first Item";
NSNumber *secondItem = [[NSNumber numberWithBool:YES];
YourCustomObject *thirdItem= [[YourCustomObject alloc] init];

//your array to pass
NSArray *arrayToPass = [[NSArray arrayWithObjects:firstItem, secondItem, thirdItem, nil];

//call you method after delay and pass all the objects:
[self oerformSelector:@selector(doStuffWithMultipleParams:) withObject:arrayToPass afterDelay:3.0f];
该方法可以这样使用:

 - (void)doStuffWithMultipleParams:(NSArray *)passedArray{
    String *s; 
    BOOL b;
    YourCustomObject *obj;
    if ([[passedArray objectAtIndex:0] isKindOfClass:[NSString class]]){
        s = [passedArray objectAtIndex:0];
    }
    if ([[passedArray objectAtIndex:1] isKindOfClass:[NSNumber class]]){
        b = [[passedArray objectAtIndex:1] boolValue];
    }
    if ([[passedArray objectAtIndex:1] isKindOfClass:[YourCustomObject class]]){
        obj = [passedArray objectAtIndex:2];
    }
    if (s || b || obj){
        //now do stuff with these objects
    }


}

这不是对
performSelector:withObject:afterDelay:
的完全替代,因为不能取消
performSelector:withObject:afterDelay:
后的GCD
dispatch\u,而
performSelector:withObject:afterDelay:
可以使用
cancel先前的performrequestswithTarget:selector:object:
取消,谢谢,这很有效。那么
[自调度:@selector(aMethod:CCSprite)]呢带参数?如何设置数组?使用参数创建数组..传递数组。。在received方法中,您知道数组中参数的顺序。按照正确的顺序获取参数。为了更清楚,请使用带键的字典来标识每个参数。。通过它。。从后面检索对象我如何调用Receiving方法
-(void)test:(NSString*)testwith{}
?这次分派答案对我有效,所以我接受了它。不过我会用这个做其他的东西,谢谢你教我一些东西!