don*_*ile 0 iphone multithreading
例如,我经常使用这个:
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:someDelay];
Run Code Online (Sandbox Code Playgroud)
现在,让我说我称之为10次以完全相同的延迟执行,如:
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
[self performSelector:@selector(doSomethingAfterDelay:) withObject:someObject afterDelay:2.0];
- (void)doSomethingAfterDelay:(id)someObject {
/*
access an array, read stuff, write stuff, do different things that would suffer in multithreaded environments .... all operations are nonatomic!
*/
}
Run Code Online (Sandbox Code Playgroud)
做这样的事情时,我发现了很奇怪的行为.根据我的理解,这个方法安排一个计时器来触发当前线程,所以在这种情况下是主线程.但由于它不会创建新线程,实际上不应该遇到并发问题,对吧?
简短的回答.是的 - 不应该遇到并发问题.performSelectorWithObjectAfterDelay在主线程上执行(并阻止UI).但是,在上面的示例中,我不想猜测它们将运行的顺序 - 许多调用可以在运行循环的同一圈进行调度.
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |