В руководствах по программированию демонов и служб сообщается, что можно вернуть прокси-объект через открытое соединение XPC даже в качестве параметра блока ответа.
Передача объекта через прокси
В большинстве случаев имеет смысл копировать объекты и отправлять их на другую сторону соединения. Однако это не всегда желательно. Особенно:
Если вам нужно разделить один экземпляр данных между клиентским приложением и помощником, вы должны передать объекты через прокси. Если объекту необходимо вызывать методы других объектов в вашем приложении, которые вы не можете или не хотите передавать через соединение (например, объекты пользовательского интерфейса), вы должны передать объект через прокси — либо вызывающий, либо вызываемый (где возможно) или релейный объект, который вы создаете специально для этой цели. Недостатком передачи объектов через прокси является значительное снижение производительности (поскольку каждый доступ к объекту требует межпроцессного взаимодействия). По этой причине вам следует передавать объекты по доверенности только в том случае, если невозможно передать их путем копирования.
Вы можете настроить дополнительные прокси-объекты аналогично тому, как вы настроили свойство remoteObjectInterface исходного соединения. Сначала определите, какой параметр методу должен передаваться через прокси, затем укажите объект NSXPCInterface, определяющий интерфейс для этого объекта.
Возникают первые вопросы: как должен быть определен объект, который будет передаваться прокси? Как объект, соответствующий протоколу NSXPCProxyCreating? Должны ли быть реализованы методы remoteObjectProxy и remoteObjectProxyWithErrorHandler:?
Далее следует пример, который мне совершенно не ясен. В частности, я не понимаю, где я должен вызывать метод NSXPCInterface (setInterface:forSelector:argumentIndex:ofReply:) для внесения параметра в белый список в качестве прокси: в коде службы XPC или в хосте?
Первым параметром метода является параметр 0, за ним следует параметр 1 и так далее.
В этом случае для параметра ofReply передается значение НЕТ, поскольку этот код модифицирует белый список для одного из параметров самого метода. Если вы вносите класс в белый список для параметра блока ответа метода, вместо этого передайте YES.
Итак, вопрос: может ли кто-нибудь дать мне четкое руководство о том, как вернуть объект в качестве прокси в блочном ответе на вызов метода XPC?