如何使dispatch_async运行

问题描述 投票:0回答:1

在下面的代码中,在运行应用程序时,块变量内的日志

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);
ios objective-c grand-central-dispatch dispatch
1个回答
0
投票

假设“ main”表示main()启动功能,并且您显示的代码是main()的整体,那么:

main()返回后,该应用程序即被终止。因此,根据您的情况,block1可能会开始执行,也可能不会开始执行,但是无论如何该应用都会迅速终止。

将行复制到标准GUI应用程序的applicationDidFinishLaunching:(macOS)或application:didFinishLaunchingWithOptions:(iOS)方法中,然后运行它。 GUI应用程序作为运行循环,可使其一直运行,直到某个事件终止该应用程序为止,这样您的应用程序将运行足够长的时间以使您的block1执行(对于测试,您可能希望将700更改为7或您将等待很长时间才能完成)。

HTH

© www.soinside.com 2019 - 2024. All rights reserved.