Я некоторое время пытался запустить NSTask
из NSOperation
.
Вот очень простое приложение , которое я собрал, чтобы продемонстрировать проблему,Когда вы нажимаете кнопку, NSOperation
ставится в очередь.Он устанавливает NSRunLoop
и вызывает метод, который вызывает NSTask
.Задача действительно проста - она просто запускает /bin/sleep
в течение двух секунд (этого достаточно, чтобы легко видеть счетчик, когда все работает правильно).
Приложение работает так, как объявлено, однако, если вы измените строку 23 в TaskPerformer.m к autorelease
, (извините, я новый автор, поэтому я не могу напрямую связать его) или закомментируйте его полностью (таким образом, пропуская объект NSTask
), поток NSOperation
никогда не завершится.Кажется, что основной цикл запуска чего-то блокирует.
Теперь проблема здесь двоякая.Во-первых, я не понимаю, почему мой поток блокирует, но, более того, если я включаю сборку мусора для этого приложения, то же самое поведение проявляется.Поскольку у меня нет возможности вручную выпустить NSTask
, поток блокируется независимо от того, что.
Если бы кто-то мог сказать мне, что происходит, я был бы бесконечно благодарен!