提问人:acreek 提问时间:12/14/2008 最后编辑:iDeveloperacreek 更新时间:4/4/2016 访问量:980
定时环路结果
Timing loop results
问:
我有点卡住了,我希望有人能为我指出正确的方向。我有一个存储序列的 NSMutableArray。我创建了一个枚举器,以便 while 循环可以逐个获取数组的内容。
一切正常,但是我希望在每次调用之间有 10 秒的间隔来调用这些方法。现在它一次播放(或以非常快的顺序播放)。我应该考虑什么才能在方法调用之间产生延迟?
以下是我目前得到的。谢谢!
NSEnumerator * enumerator = [gameSequenceArray objectEnumerator];
id element;
while(element = [enumerator nextObject])
{
NSLog(element);
int elementInt = [element intValue];
[self.view showButton:elementInt];
}
答:
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 {
...
}
评论