A framework - это набор кода и ресурсов, которые могут использоваться и повторно использоваться несколькими приложениями. Он может быть встроен в ваше приложение, быть частью операционной системы (на самом деле весь Cocoa - это набор фреймворков) или динамически размещаться и программно загружаться во время выполнения. После загрузки код, классы и ресурсы инфраструктуры представляются приложению, как если бы они были скомпилированы непосредственно в хост-приложение. Ключ заключается в том, что код выполняется непосредственно в области памяти вашего процесса.
XPC является межпроцессным средством связи. Это позволяет одному процессу отправлять и получать сообщения с другим процессом. Его нельзя использовать для общения с самим собой.
Вы не можете «стать владельцем» объекта с помощью XPC. Все сообщения XPC сериализуют («архивируют» на языке какао) любой объект и десериализуют этот объект на принимающей стороне. Второй процесс теперь как точная копия оригинального объекта; это не ссылка на исходный объект и ограничена границами его процесса.
Если ваш второй процесс должен что-то отображать, у вас есть (в основном) три варианта:
(1) Сделайте второй процесс своим собственным приложением. Второй процесс может быть полноценным приложением Какао с окнами и так далее. Вы можете сделать его «вспомогательным» приложением, чтобы оно не имело меню или не появлялось в доке. См. LSUIPresentationMode
Свойство Info.plist и / или NSApplication.activationPolicy
.
(2) Продвинутая техника заключается в использовании IOSurface
. IOSurface
- это, по сути, метод, с помощью которого второй процесс (ваша служба XPC) может рисовать непосредственно в окне вашего приложения. Опять же, объекты рисования все еще существуют - и полностью изолированы - во втором процессе; но то, что они рисуют, будет отображаться в вашем приложении, как если бы они были объектами локального просмотра. (Вот как работает Safari; каждая страница браузера отображается отдельным фоновым процессом, рисующим на поверхности.)
(3) Используйте IOSurface
для бедняков: отправьте ваши данные во второй процесс, пусть он отобразит результаты во что-то (массив пикселей, TIFF, PNG, ...), которое может быть сериализовано и отрисовано хост-приложение, затем используйте XPC для отправки этого отрендеренного изображения обратно в хост-приложение для отображения.
Руководство по программированию демонов и служб
IOSurface