Какао - информация о Возврате от NSOperation

Вы могли сделать поле составным значением, которое включает (концептуально) идентификатор процесса и метку времени. [Еще лучше используйте два или больше поля.] Запускают поток в процессе, который владеет доступом к полю, и имейте его цикл, спя и обновляя метку времени. Затем процесс опроса, который ожидает для владения доступом к полю, может заметить, что метка времени не обновила в некоторое время T (который намного больше, чем время интервала сна цикла обновления), и предположите, что ранее владеющий процесс умер.

, Но это все еще подвержено отказу.

На других языках, я всегда пытаюсь использовать скопление (), звонит для синхронизации на файле. Не уверенный, каков эквивалентный Java. Получите реальный параллелизм, если Вы вообще возможно можете.

7
задан Brian 19 August 2009 в 03:53
поделиться

2 ответа

I ' Я лично сделал это двумя способами. Оба работали достаточно хорошо.

Первый способ

У вас может быть функция, которая возвращает «результат», и вы вызываете эту функцию после завершения операции. Вы можете наблюдать за ключом isFinished в объекте NSOperation или использовать - [NSOperationQueue waitUntilAllOperationsAreFinished] , чтобы определить, когда операция завершена.

Второй способ

Вы можете использовать делегат или цель / действие из NSOperation. Просто убедитесь, что когда вы вызываете функцию делегата или запускаете цель / действие, вы делаете это в основном потоке, используя - [NSObject performSelectorOnMainThread: withObject: waitUntilDone:]

16
ответ дан 6 December 2019 в 11:50
поделиться

Это зависит от вашего приложения. Сколько операций вы планируете выполнять одновременно? Что ты делаешь с результатом? Агрегируются ли результаты или их нужно немедленно отображать в пользовательском интерфейсе?

Отправка уведомлений в основном потоке является довольно сложной задачей. В зависимости от того, что вы делаете с результатом, вы можете забить свой пользовательский интерфейс. С точки зрения дизайна, являются ли объекты, которые вы отправляете из уведомления, тем, о чем должен знать наблюдающий класс? Возможно, имеет смысл внести изменения в объекты модели из операции и вместо этого заставить объект контроллера наблюдать за этими изменениями.

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

Если объект принадлежит и используется только операцией, тогда да, отправка по адресу должна быть безопасной. конец main. Он будет сохранен в уведомлении.

1
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: