2014-09-24 1 views
2

Я понимаю, что не может быть правильного ответа, но мне было очень любопытно узнать, что люди думают об этой проблеме, или если есть плюсы и минусы для следующих подходов. Первый пример отправляет уведомление по основному потоку, а второй пример обрабатывает уведомление в основном потоке. Если бы вы выбрали один из двух подходов, какой и почему?Что лучше, отправка NSNotification в основной поток или передача уведомления по основному потоку

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


- (void)handleNotification:(NSNotification *)notification { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self updateUI]; 
    }); 
} 

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

Я ценю любые отзывы, которые у вас есть.

ответ

4

Я предпочел бы второй подход, когда отправитель также использует контекст выполнения current. Это более эффективно. Следует избегать ненужной отправки на основной поток. Однако это должно быть четко документировано.

Приемник, с другой стороны, является единственным экземпляром, зная, существуют ли какие-либо ограничения для его кода относительно контекста выполнения. То есть, если их нет, он может просто использовать текущий контекст выполнения. В противном случае, он должен отправлять в любой поток/очередь, которая требуется для кода.

Итак, мы, конечно, согласен;)

-3

Почтовые оповещения будут синхронизированы. Удалите код простым.

+4

Это неправильная информация. Проводка уведомления через центр уведомлений является синхронной – Shai

0

Используйте modern block-based syntax для добавления наблюдателей уведомлений, который позволяет определить очередь кода, который должен быть запущен, когда получено уведомление.

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