1

我有一个顶级块,我想在其中创建一个变量,然后将它传递给一个子块。

我是否需要在要在顶级块中创建的数组上添加保留?这是线程安全的,因为我在一个中创建数据并将其传递给另一个?

dispatch_async(myCustomQ, ^{

 NSMutableArray *myArray = [NSMutableArray array];

 // add things to myArray here

 dispatch_async(dispatch_get_main_queue(), ^{
   [[NSNotificationCenter defaultCenter] postNotificationName:@"aMessageToSend"      
        object:myArray];
 });
});
4

1 回答 1

2

只要您myArray在第二个块通过入队dispatch_async()后不进行修改,那么——是的——该代码既正确又线程安全。

请注意,您依赖于myCustomQ的隐含自动释放池。我建议使用自动释放池围绕该块(在开始时创建一个,在主队列块入队后将其排空)。

于 2011-02-23T03:29:35.957 回答