Приостановка очереди, а затем отбрасывание вашей единственной ссылки на эту очередь вряд ли достигнет того, что вы думаете.
В теории вы ожидаете утечки: когда вы вызываете dispatch_suspend
, текущая выполняемая задача будет завершена, но любые ожидающие задачи будут приостановлены (и будут поддерживать сильную ссылку на очередь). Хуже того, потому что вы отбросили свою единственную ссылку на очередь, у вас никогда не будет возможности возобновить работу очереди и освободить эти ресурсы. Теоретически, вы пропустили бы очередь и любые блокированные отправленные блоки (и любые объекты, к которым эти блокированные блоки имеют сильные ссылки).
На практике, когда вы это сделаете (удалите последнюю сильную ссылку на приостановленную очередь в iOS 6+), она сработает. Возможно, iOS должен справиться с этим более грациозно, но, тем не менее, неудивительно, что сценарий удаления вашей последней ссылки на приостановленную очередь, не имея возможности возобновить ее, будет проблематичным.
Нижняя линия, не приостанавливайте очередь и затем пытайтесь ее освободить. Если вы хотите отменить фоновые задачи, вы можете использовать operation queues, а не Grand Central Dispatch. Операционные очереди обрабатывают отмененные операции более грациозно, и если вы используете подкласс NSOperation
, вы даже можете написать код для обработки отмены операции, которая также может выполняться.
Нужна дополнительная информация. Какая авария? Какую ошибку вы видите в консоли? –
Вы используете 'queue' и' imageQueue'. – Eimantas
Xcode show '0x388d7ffc: trap Thread 1: EXC_BREAKPOINT (code = EXC_ARM_BREAKPOINT, subcode = 0xdefe)' – user2828120