передача данных из блока в другой с большой центральной диспетчеризацией - PullRequest
1 голос
/ 23 февраля 2011

У меня есть блок верхнего уровня, в котором я хотел бы создать переменную, а затем передать ее в дочерний блок.

Нужно ли добавить сохранение в массив, который я собираюсь создать в блоке верхнего уровня?Является ли этот потокобезопасным, поскольку я создаю данные в одном и передаю их другому?

dispatch_async(myCustomQ, ^{

 NSMutableArray *myArray = [NSMutableArray array];

 // add things to myArray here

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

1 Ответ

2 голосов
/ 23 февраля 2011

Пока вы не измените myArray после того, как второй блок поставлен в очередь через dispatch_async(), тогда - да - этот код является правильным и поточно-ориентированным.

Обратите внимание, что вы полагаетесь на подразумеваемый пул автоматического выпуска myCustomQ. Я бы рекомендовал окружить этот блок пулом автоматического выпуска (создать его в начале, слить его в конце после постановки в очередь основного блока очереди).

...