Up
Authors
- Richard Frith-Macdonald (
richard@brainstorm.co.uk
)
-
- Andrew Kachites McCallum (
mccallum@gnu.ai.mit.edu
)
-
Version: 36517
Date: 2013-04-13 04:40:15 -0600 (Sat, 13 Apr 2013)
Copyright: (C) 1997 Free Software Foundation, Inc.
- Declared in:
- Foundation/NSDistantObject.h
- Conforms to:
- NSCoding
Availability: OpenStep
Instances of this class act as proxies to remote
objects using the Distributed Objects system. They
also hold references to local objects which are vended
to remote processes.
Instance Variables
Method summary
+ (
NSDistantObject*)
proxyWithLocal: (id)anObject
connection: (
NSConnection*)aConnection;
Availability: OpenStep
Creates and returns a proxy associated with
aConnection which will hold a reference to
the local object anObject.
+ (
NSDistantObject*)
proxyWithTarget: (unsigned)anObject
connection: (
NSConnection*)aConnection;
Availability: OpenStep
Creates and returns a proxy associated with
aConnection which will provide a link to a
remote object whose reference locally is
anObject.
- (
NSConnection*)
connectionForProxy;
Availability: OpenStep
Returns the
NSConnection
instance with which the receiver is associated.
- (id)
initWithLocal: (id)anObject
connection: (
NSConnection*)aConnection;
Availability: OpenStep
Initialises and returns a proxy associated with
aConnection which will hold a reference to
the local object anObject.
- (id)
initWithTarget: (unsigned)target
connection: (
NSConnection*)aConnection;
Availability: OpenStep
Initialises and returns a proxy associated with
aConnection which will provide a link to a
remote object whose reference locally is
target.
- (
NSMethodSignature*)
methodSignatureForSelector: (SEL)aSelector;
Availability: OpenStep
Returns the method signature describing the
arguments and return types of the method in the
object referred to by the receiver which
implements the aSelector message.
This method may need to refer to another process
(causing relatively slow network communication)
and approximately double the time
taken for sending a distributed objects message, so
you are advised to use the
-setProtocolForProxy:
method to avoid this occurring.
- (void)
setProtocolForProxy: (Protocol*)aProtocol;
Availability: OpenStep
A key method for Distributed Objects performance. This
sets the a protocol that the distant object referred
to by the proxy should conform to. When messages in
that protocol are sent to the proxy, the proxy knows
that it does not need to ask the remote object for
the method signature in order to send the message to
it, but can send the message straight away based on
the local method signature information obtained from
the protocol.
if ([anObj isProxy] == YES)
{
[anObj setProtocolForProxy: @protocol(MyProtocol)];
}
It is highly recommended that you make use of
this facility, but you must beware that versions of
the compiler prior to 3.3 suffer a serious bug with
respect to the @protocol directive. If the
protocol referred to is not declared and
implemented in the file where @protocol is
used to refer to the protocol by name, a runtime
error will occur when you try to use it.
Beware, if you don't use this method to set the
protocol, the system might well ask the remote
process for method signature information, and the
remote process might get it wrong. This
is because the class of the remote object needs to
have been declared to conform to the protocol in
order for it to know about any protocol qualifiers
(the keywords
bycopy, byref, in, out, inout,
and
oneway
). If the author of the server
process forgot to do this, the type information
returned from that process may not be what you
are expecting.
The class of the server object should be declared like
this...
@interface MyServerClass : NSObject <MyProtocol>
...
@end
Instance Variables for NSDistantObject Class
@public NSConnection* _connection;
Availability: OpenStep
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
@public unsigned int _counter;
Availability: OpenStep
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
@public unsigned int _handle;
Availability: OpenStep
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
@public id _object;
Availability: OpenStep
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
@public Protocol* _protocol;
Availability: OpenStep
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
@public void* _sigs;
Availability: OpenStep
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
Up