在下面的代码中,在运行应用程序时,块变量内的日志
block1
从未执行过,只有
NSLog(@"Delay_Expired");
请让我知道如何使dispatch_async运行。
main
dispatch_block_t block1 = ^{
for (int i = 0; i < 10; i++) {
[NSThread sleepForTimeInterval: 700];
NSLog(@"current i = %d", i);
}
};
dispatch_queue_t defaultPriority = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t backgroundPriority = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
NSLog(@"Delay_Expired");
dispatch_async(defaultPriority, block1);
假设“ main”表示main()
启动功能,并且您显示的代码是main()
的整体,那么:
main()
返回后,该应用程序即被终止。因此,根据您的情况,block1
可能会开始执行,也可能不会开始执行,但是无论如何该应用都会迅速终止。
将行复制到标准GUI应用程序的applicationDidFinishLaunching:
(macOS)或application:didFinishLaunchingWithOptions:
(iOS)方法中,然后运行它。 GUI应用程序作为运行循环,可使其一直运行,直到某个事件终止该应用程序为止,这样您的应用程序将运行足够长的时间以使您的block1
执行(对于测试,您可能希望将700
更改为7
或您将等待很长时间才能完成)。
HTH