Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 延迟后调度\u与延迟后性能选择器_Ios_Grand Central Dispatch - Fatal编程技术网

Ios 延迟后调度\u与延迟后性能选择器

Ios 延迟后调度\u与延迟后性能选择器,ios,grand-central-dispatch,Ios,Grand Central Dispatch,我正在写一个带滑块的游戏。为了将游戏从已解决状态洗牌,我想定期反复调用pushRandomPiece,以直观地洗牌游戏 首先我想使用dispatch_after,但我对解雇日期有问题: 这项工作: -(void)shuffle { for (int i=0; i<50;i++) [self performSelector:@selector(pushRandomPiece) withObject:nil afterDelay:i*0.50*2]; } 以下是使块移动的方法

我正在写一个带滑块的游戏。为了将游戏从已解决状态洗牌,我想定期反复调用
pushRandomPiece
,以直观地洗牌游戏

首先我想使用dispatch_after,但我对解雇日期有问题:

这项工作:

-(void)shuffle {
    for (int i=0; i<50;i++)
    [self performSelector:@selector(pushRandomPiece) withObject:nil afterDelay:i*0.50*2];
}
以下是使块移动的方法:

-(void) pushRandomPiece {
    NSSet * s = [self freeBlocks];
    int n = [s count];
    int piece = arc4random_uniform(n);
    Piece * p = [[s allObjects] objectAtIndex:piece];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self pushPiece:p];
    });
}

dispatch\u after
仅在指定的时间之后将块添加到队列中。如果队列为空,则在将块添加到队列后,可以立即运行块。否则,它可能会在运行前等待一段时间等待其他任务完成。

有没有一种方法,使用Grand Central Debug来调度给定日期的块的执行?@ AntoineLecaille,应该在主运行循环中考虑一个重复的<代码> NSTIMER < /C>(这是一个低频)。您可以使用libdispatch,使用调度源和计时器(
dispatch\u source\u create
+
dispatch\u source\u set\u timer
)。在这种情况下我不会。@justin那么dispatch\u after与performSelector有何不同呢?@entropy
-performSelector:
只是立即发送消息,没有参数,也没有延迟。
2013-10-01 11:02:53.147 SlidingPuzzle[2006:60b] diff= 1.077376
2013-10-01 11:02:54.262 SlidingPuzzle[2006:60b] diff= 1.111863
2013-10-01 11:02:55.335 SlidingPuzzle[2006:60b] diff= 1.070456
2013-10-01 11:02:56.455 SlidingPuzzle[2006:60b] diff= 1.117381
2013-10-01 11:02:57.542 SlidingPuzzle[2006:60b] diff= 1.084070
2013-10-01 11:02:58.655 SlidingPuzzle[2006:60b] diff= 1.110574
2013-10-01 11:02:59.757 SlidingPuzzle[2006:60b] diff= 1.098654
2013-10-01 11:03:00.862 SlidingPuzzle[2006:60b] diff= 1.103132
2013-10-01 11:03:01.956 SlidingPuzzle[2006:60b] diff= 1.091535
2013-10-01 11:03:03.050 SlidingPuzzle[2006:60b] diff= 1.090532
2013-10-01 11:03:04.160 SlidingPuzzle[2006:60b] diff= 1.107981
2013-10-01 11:03:04.164 SlidingPuzzle[2006:60b] diff= 0.000982
2013-10-01 11:03:06.354 SlidingPuzzle[2006:60b] diff= 2.187945
2013-10-01 11:03:06.357 SlidingPuzzle[2006:60b] diff= 0.000862
2013-10-01 11:03:08.498 SlidingPuzzle[2006:60b] diff= 2.139442
2013-10-01 11:03:08.501 SlidingPuzzle[2006:60b] diff= 0.000805
2013-10-01 11:03:10.750 SlidingPuzzle[2006:60b] diff= 2.246749
2013-10-01 11:03:10.753 SlidingPuzzle[2006:60b] diff= 0.000839
-(void) pushRandomPiece {
    NSSet * s = [self freeBlocks];
    int n = [s count];
    int piece = arc4random_uniform(n);
    Piece * p = [[s allObjects] objectAtIndex:piece];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self pushPiece:p];
    });
}