我是XPC服务编程的新手,我正在尝试将在XPC服务中创建的IOSurface共享给主机应用程序。我可以使用NSXPCConnection接口设置一个简单的主机和服务,现在我想我应该使用这两个方法(在IOSurfaceAPI.h中找到)将IOSurface传递给主机:
IOSurfaceRef IOSurfaceLookupFromXPCObject(xpc_object_t xobj);
xpc_object_t IOSurfaceCreateXPCObject(IOSurfaceRef aSurface);有没有一种方法可以使用xpc.hAPI传递xpc_object_t,或者我应该使用can (如NSXPCConnection中所定义的)?
发布于 2013-01-01 08:13:13
问得好。The "Daemons and Services Programming Guide"声明XPC代理方法只能处理以下数据类型:
on)
对象的类型
xpc_object_t只是void *的一个类型定义,所以它不符合这些标准中的任何一个,我看不到有任何方法可以将它包装在可以满足这些标准的东西中。(尝试将其转换为数据,或将其转换为适当大小的int将不起作用。)
另一方面,在10.8中,xpc_object_t也是一个足够的Objective-C对象,可以与ARC一起保留/释放,可以添加到Objective-C集合中,等等。
尝试在你的协议上传递一个xpc_object_t是很容易的,只是为了看看苹果是否留下了一个未被记录的漏洞。试试看!
否则,低级XPC API肯定会起作用:
xpc_object_t message = xpc_dictionary_create(NULL, NULL, 0);
xpc_object_t xpcSurface = IOSurfaceCreateXPCObject(aSurface);
xpc_dictionary_set_value(message, "surface", xpcSurface);
xpc_connection_send_message(connection, message);https://stackoverflow.com/questions/14103514
复制相似问题