异步块给出 NULL

asynchronous blocks giving NULL

当我为第一个 for 循环设置断点时,我注意到它正在执行但值没有更新为字符串 "Viki"。相反,它只是 NULL。

另外,最后一行代码NSLog(@"Mahal");没有执行。为什么?

 NSMutableArray *arr1;
    for(int i=0; i<3; i++)
    {
        [arr1 addObject:@"Viki"]; 
    }

    NSLog(@"Hello");
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                   NSLog(@"Taj");
        for(int i=0; i<3; i++)
        {
            NSLog(@"%@", [arr1 objectAtIndex:i]);
        }
        dispatch_sync(dispatch_get_main_queue(), ^{ // 2
            NSLog(@"Mahal"); // 3
        });
    });

您没有将 arr1 初始化为指向实际的数组对象。你只声明了指针变量,你从来没有让它指向任何东西。它默认为 nil,所有消息都为 nil return nil(或适合该类型的其他 zero-valued 结果)。

如果您曾记录 arr1 的值,您可能会发现这一点。