2015-05-21 2 views
0

Я хотел бы создать собственный класс, который расширяет NSOperation, чтобы обеспечить успешную связь с другим устройством с помощью bluetooth. Вопрос, который у меня есть, заключается в том, как я могу реализовать основной метод класса, чтобы он ожидал события, вызванного bluetooth?NSOperation wait for event

ответ

1

Никогда не используйте бесконечный цикл. Он не является энергоэффективным. Как сказал @lead_the_zeppelin, используйте семафор/мьютекс/и т. Д. Например, вы можете использовать dispatch_group такие функции:

dispatch_group_t waitGroup = dispatch_group_create(); 
dispatch_group_enter(waitGroup); 
dispatch_async(otherQueue, ^{ 
    //long-running code 
    dispatch_group_leave(waitGroup); 
} 
dispatch_group_wait(waitGroup, DISPATCH_TIME_FOREVER); 
-1

То, что я сделал, это просто использовать непрерывный цикл в то время, пока какое-то событие не вызовет BOOL, чтобы остановить цикл. Я не знаю, безопасно ли это, но это работает.

while(!self.didFinish){ 
    ; 
} 
+0

никогда не используйте бесконечный цикл. Используйте семафор или что-то подобное. –

+0

Не могли бы вы привести мне пример? –

+0

, пожалуйста, посмотрите на решение Sega-Zero, чтобы вместо этого использовать групповую диспетчеризацию. [Read] (https://developer.apple.com/library/mac/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html) больше о очередях отправки. –