Retired Document
Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid.
For interprocess communication, you should use XPC instead; see XPC Services API Reference for more information.
Getting a Vended Object
An application gets a vended object by creating a proxy, or a stand-in, for that object in its own address space. The proxy forwards messages sent to it through its NSConnection
object back to the vended object. An application can get a proxy for a vended object in two ways. First, the rootProxyForConnectionWithRegisteredName:host:
class method returns the proxy directly:
id theProxy; |
theProxy = [[NSConnection |
rootProxyForConnectionWithRegisteredName:@"server" |
host:nil] retain]; |
[theProxy setProtocolForProxy:@protocol(ServerProtocol)]; |
This message returns a proxy to the root object of the NSConnection
object named “server”. The nil
host name indicates that only the local host is searched for a registered NSConnection
object; you can specify a specific host name to restrict the server to an identified host.
The invocation of setProtocolForProxy:
informs the distributed objects system of the set of messages that theProxy responds to. Normally, the first time a particular selector is forwarded by a proxy the NSConnection
object must confirm the argument and return types with the real object. This can add significant overhead to distributed messages. Setting a protocol records this information so that no confirmation is needed for the messages in the protocol, and only the message forwarding costs are incurred.
Another way to get a proxy is to get an NSConnection
object to the server and then ask for the proxy of its root object:
NSConnection *theConnection; |
id theProxy; |
theConnection = [NSConnection connectionWithRegisteredName:@"server" |
host:nil]; |
theProxy = [[theConnection rootProxy] retain]; |
[theProxy setProtocolForProxy:@protocol(ServerProtocol)]; |
This is useful if you need to interact with the NSConnection
object as well as the proxy. (However, note that theConnection is not retained in this example.)
A named NSConnection
object spawns a child NSConnection
object to handle communication between two applications (s
spawning s/b
and s/a
in Figure 1). Though the child NSConnection
object does not have a name, it shares the root object and other configuration attributes of its parent, but not the delegate. You should not register a child NSConnection
object with a name or change its root object, but you can change its other attributes, as described in Configuring a Connection.
By default, messages sent to a proxy object are forwarded over the connection synchronously; that is, the sender waits for the message to be processed and a reply received from the remote object. This occurs even for a method with a void
return type, since the remote object can raise an exception that is passed back to the sender. The local thread or application thus blocks until the message completes execution. To avoid this, you can declare the method type as oneway void
to cause asynchronous messaging. For more details, see the “Remote Messaging” section of The Runtime System in The Objective-C Programming Language.
Copyright © 2003, 2017 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2017-06-07