Понимание NSBlockOperation
Я вхожу в NSBlockOperation
и у меня есть несколько вопросов. В частности, документация для addExecutionBlock
говорит:
обсуждение
Указанный блок не должен делать никаких предположений о его среде выполнения.
Вызов этого метода, когда получатель выполняет или уже завершил, вызывает
NSInvalidArgumentException
исключение, которое будет брошено.
Какую ситуацию выкинет NSInvalidArgumentException
? Что на самом деле не означает "пока выполняется приемник"? Что может вызвать это?
2 ответа
Вы не можете использовать addExecutionBlock:
добавить блок выполнения, когда операция выполняется или уже завершена. Это все, что это значит.
Объект блочной операции может иметь ноль или более блоков исполнения, связанных с ним. Когда начинается операция блока, все связанные с ней блоки выполнения передаются для одновременного выполнения. Предупреждение состоит в том, что после этой точки вы не можете добавить больше блоков выполнения к операции.
Вы можете создавать больше объектов блочных операций и добавлять к ним блоки исполнения. Каждая операция с блоком запускается отдельно от других, поэтому правило добавления дополнительных блоков вычисляется отдельно.
Как правило, вы создаете блочную операцию, добавляете в нее любые блоки исполнения, а затем ставите ее в очередь. Как только операция была поставлена в очередь, она может начаться в любое время (в зависимости от готовности, которая зависит от зависимостей). Таким образом, лучше не пытаться добавлять блоки выполнения, когда они поставлены в очередь.