Jum*_*hyn 9 multithreading objective-c
我正在编写一个使用NSURLConnection来使用异步Web请求的应用程序,因此我运行了多个线程.为了确保我的应用程序的主要逻辑发生在一个线程上,我正在大量使用performSelectorOnMainThread:waitUntilDone:.有时虽然,我在主线程上运行它,这激起了我的好奇心.
如果performSelectorOnMainThread:waitUntilDone:在主线程中调用?它的行为和它一样performSelector:吗?如果waitUntilDone:是的话YES?怎么样NO?
编辑:我发现,当waitUntilDone:是YES时,执行选择(几乎)立即,但我不能当如果执行弄清楚waitUntilDone:是NO.
saa*_*nib 13
performSelectorOnMainThread:withObject:waitUntilDone:
Run Code Online (Sandbox Code Playgroud)
是在传递信息的方法main thread你的application.这里的booleanvalue in参数waitUntilDone:指定是否要阻止main thread执行指定selector或不执行.
例如 -
如果你写这两行 -
[self performSelectorOnMainThread:@selector(print) withObject:nil waitUntilDone:YES];
NSLog(@"Hello iPhone");
Run Code Online (Sandbox Code Playgroud)
这是打印方法 -
- (void) print
{
NSLog(@"Hello World");
}
Run Code Online (Sandbox Code Playgroud)
然后你会得到这个o/p
Hello World
Hello iPhone
Run Code Online (Sandbox Code Playgroud)
所以它首先暂停你的执行main thread并打印"Hello World",然后再次执行主线程并打印"Hello iPhone"因为你指定YES了waitUntilDone:
但如果你NO在waitUntilDone:那里指定它将打印像这样 -
Hello iPhone
Hello World
Run Code Online (Sandbox Code Playgroud)
它清楚地表明它将您执行指定的请求selector放在一个queue操作系统中并获得它的main thread自由执行请求.
调用performSelectorOnMainThread:withObject:waitUntilDone:无论是从main thread或secondary thread不作任何区别在它的执行,这取决于你在指定的内容上waitUntilDone:
了解更多信息 -
| 归档时间: |
|
| 查看次数: |
8099 次 |
| 最近记录: |