定时环路结果

Timing loop results

提问人:acreek 提问时间:12/14/2008 最后编辑:iDeveloperacreek 更新时间:4/4/2016 访问量:980

问:

我有点卡住了,我希望有人能为我指出正确的方向。我有一个存储序列的 NSMutableArray。我创建了一个枚举器,以便 while 循环可以逐个获取数组的内容。

一切正常,但是我希望在每次调用之间有 10 秒的间隔来调用这些方法。现在它一次播放(或以非常快的顺序播放)。我应该考虑什么才能在方法调用之间产生延迟?

以下是我目前得到的。谢谢!

NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
id element;

while(element = [enumerator nextObject])
{
    NSLog(element);

    int elementInt = [element intValue];
    [self.view showButton:elementInt];
}
iOS Objective-C iPhone Cocoa-Touch

评论

0赞 acreek 12/14/2008
嘿,非常感谢大家的投入。我将提出一个解决方案,完成后我会发布它。再次感谢,我很感激。

答:

2赞 Chris Hanson 12/14/2008 #1

这就是 NSTimer 的用途。使用 NSTimer 按顺序获取数组中的每个元素。

2赞 Abizern 12/14/2008 #2

顺便说一句:你可能想看看 Objective-C 2.0 的快速枚举

评论

0赞 Lily Ballard 12/14/2008
除了这与他想要的有点相反。他想非常缓慢地列举。
1赞 Abizern 12/15/2008
难道你不知道这是一个既定的军事传统——快点等待。
3赞 Adam Wright 12/14/2008 #3

几乎可以肯定的是,你不想在循环中加入“延迟”,这将阻塞线程,直到它结束(并且,除非你的应用程序是多线程的,否则会阻止整个过程)。您可以使用多个线程,但相反,我可能会将循环拆分为另一个选择器的重复定时调用。存储枚举器(或当前索引),然后查看 NSObject 的 performSelector:awithObject:afterDelay:

所以像这样的东西

[NSObject performSelector:@selector(some:selector:name:) withObject:objInstance afterDelay: 10]

选择器将拾取当前枚举器,使用它,前进它并安排另一个呼叫。请确保在执行这组定时方法时不允许对集合进行更改。

1赞 Ashley Clark 12/14/2008 #4

如果最终使用计时器传递对象枚举器,请知道在完成枚举数组之前,不允许修改数组的内容。

0赞 acreek 12/15/2008 #5

所以这是我根据每个人的意见想出的解决方案。

NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];

NSTimeInterval time = 5;

for (NSString *element in enumerator) {
    id elementId = element;

    time++;

    [self.view performSelector:@selector(showButton:) withObject:elementId afterDelay:time];
}

再次感谢大家为我指明正确的方向。

评论

0赞 Abizern 12/15/2008
time++ 表示选择器将在 6、7、8、...秒
0赞 acreek 12/18/2008
是的,我希望在每次方法调用之间有短暂的延迟。
2赞 Abizern 12/15/2008 #6

如果 gameSequenceArray 是一个数组,则不需要使用枚举器:

NSTimeInterval time = 10;

for (id elementId in gameSequenceArray) {

    [self.view performSelector:@selector(showButton:) withObject:elementID afterDelay:time];
}

然后声明 showButton:

- (void)showButton:(id)anElement {
    ...
}