Возможно ли запустить fork () приложение Cocoa?
Да, но вам в значительной степени придется немедленно выполнить.Core Foundation выдаст исключение, если вы попытаетесь использовать определенные методы Какао или функции CF между fork и exec (или вообще без execking).Вы могли бы сойти с рук с некоторыми вещами (например, я смог спросить у окна его фрейм), но ничто не безопасно.
Запуск NSTask, конечно, считается вместе форком и exec, предотвращая проблемыпропуска или откладывания exec.
Как будут работать пользовательский интерфейс, потоки, GC, KVO, runloops при разветвлении?
Пользовательский интерфейс: Windows (реальные наэкран) не дублируются.Конечно, вы все равно не можете общаться с объектами NSWindow и NSView.
Потоки: не переносятся в подпроцесс. Это не так хорошо, как может показаться , так как проблемных случаев предостаточно;для одного другой поток мог бы удерживать блокировку в родительском элементе, который остается заблокированным в дочернем элементе, даже если поток, в котором он находился, отсутствует.
GC: Ну, сборщик мусора работает в потоке…
KVO: Должно быть в порядке, поскольку наблюдение обычно запускается либо явно, либо с помощью средств доступа к оболочке, предоставляемых KVO.
Циклы выполнения: по одному на поток, поэтому цикл выполнения основного потока все еще должен существовать, но онумрет, если вы вернетесь к нему.
Можно ли избежать создания автономного исполняемого файла, запускаемого через NSTask?
Нет.
Если я запустлюотдельный процесс, как я могу отправлять и получать экземпляры объектов ObjC?
Если вы не исполняете, вы не делаете.
В противном случае вы можете использовать DO.
(я бы предпочел не сериализовать / не сериализовать их самостоятельно, и мне нужно сохранить их после завершения дочернего процесса).
Затем вам нужно будет сделать копию вродительский процесс.Я не знаю, можете ли вы использовать copyWithZone:
здесь;возможно нет.Я подозреваю, что вам придется выполнить некоторую сериализацию / десериализацию на основе plist или архива.
Как OS X решает эту проблему для плагинов Spotlight и Quicklook?
Прожектор имеет mdworker;Quick Look имеет что-то похожее.