我想通过添加一些延迟来更新这个UITextView的内容和这个NSMutable数组。
- (void)viewDidLoad{
[super viewDidLoad];
myArray = [[NSMutableArray alloc]initWithObjects:@"String1",@"String2",@"String3",@"String4", @"String5",..... nil];
int index = arc4random() % [myArray count];
myTextView.text = [myArray objectAtIndex:index];
我想在UITextView中一个接一个地显示这个NSMutable数组。
有没有办法在UITextView中显示数组有一些延迟。
请帮忙
答案 0 :(得分:3)
执行此操作的正确方法将使用重复计时器。计时器配置为每秒重复并调用某种方法。
[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateText:)
userInfo:nil
repeats:YES];
在(新)updateText
方法中,您将生成随机数并更新文本。
- (void)updateText:(NSTimer *)theTimer {
int index = arc4random() % [myArray count];
myTextView.text = [myArray objectAtIndex:index];
}
这是一个几乎是自我记录的干净解决方案。
你可能可以<{1}}或performSelector:withObject:afterDelay:
执行此操作,但这很容易出错,实际的工作解决方案更复杂,更难实现理解。
如果你认为你可以循环一定次数并在内部调用其中任何一个,那么你会看到一些有趣的东西。这两种方法都是异步的,不会等待调用调用。他们只是将它安排在“现在”的指定时间内发生。
dispatch_after()
你可以想象,结果是一秒钟什么也不会发生。然后所有预定的呼叫将立即发生。
这实际上等于在一秒钟后执行整个循环。
Loop
0 |----- 1s wait -----| |update|
1 |----- 1s wait -----| |update|
2 |----- 1s wait -----| |update|
3 |----- 1s wait -----| |update|
...
----------- time --------------------->
如果你在每次更新后安排下一个电话
,你可以使这个工作 |----- 1s wait -----| Loop:
0 |update|
1 |update|
2 |update|
3 |update|
...
----------- time --------------------->
为此,您必须安排上一次更新中的下一次更新。
|----- 1s wait -----| |update| |----- 1s wait -----| |update| ...
----------- time --------------------->
这与重复计时器完全相同但有两个主要缺点。
1)不太直观。
在计时器示例中,您只需阅读计时器代码即可了解文本每秒都会更新。在这种情况下,您只需拨打- (void)updateText {
int index = arc4random() % [myArray count];
myTextView.text = [myArray objectAtIndex:index];
[self performSelector:@selector(updateText)
withObject:nil
afterDelay:1.0];
}
即可。通过阅读该代码而不查看updateText的实现这是一个重复的过程是不直观的。
2)如果你想让它停止,它会变得更加复杂。
您可以保留指向updateText
的指针,只需拨打NSTimer
即可停止指针。使用[myTimer invalidate];
或performSelector:...
的代码尚不支持它,如果它是为了支持它而构建的,那将更复杂,更不直观。
答案 1 :(得分:2)
很少有办法,根据我的偏好进行排名:
1 ..您可以使用:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
2 .. Grand Central Dispatch也将为您服务。