FROM : Jean-Daniel Dupas
DATE : Mon Jun 30 22:19:08 2008
Le 30 juin 08 à 22:10, eblu a écrit :
> Hi Chris,
> I'm not terribly sure what you are asking for here. From my
> experience (limited experience admittedly) theres really only one
> way to use NSConnection.
> its a pretty elegant class, which is simple, and works as expected,
> except for when garbage collection is enabled.
>
> heres what I do just after NSNetService finds a service:
>
> // Sent when a service appears
> - (void)netServiceBrowser:(NSNetServiceBrowser *)browser
> didFindService:(NSNetService *)aNetService
> moreComing:(BOOL)moreComing
> {
> NSMutableDictionary* newDict = [[NSMutableDictionary alloc] init];
> [newDict setValue:aNetService forKey:@"theService"];
>
> [serverArrayController addObject:newDict];
> [aNetService setDelegate:self];
> [aNetService resolveWithTimeout:5];
> if(!moreComing)
> {
> }
> }
>
> // NSNetService Delegate method:
> - (void)netServiceDidResolveAddress:(NSNetService *)sender{
>
> id proxy = nil;
> NSData *addy;
> NSSocketPort* socket;
> NSConnection* connection;
> NSString* hostname;
>
> int a;
> int i;
>
> hostname = [sender hostName];
> socket = (NSSocketPort*)[[NSSocketPortNameServer sharedInstance]
> portForName:@"BKOtherPort" host:hostname];
> connection = [NSConnection connectionWithReceivePort: nil sendPort:
> socket];
> @try{
> proxy = [connection rootProxy];
> }
> @catch(id exception){
> proxy = nil;
>
> }
> addy = [socket address];
> if(proxy){
> // app level stuff if the proxy exists
> }
> }
>
> pretty straight forward,
> and every time I ran it with garbage collection on, the NSConnection
> initialized, but NEVER returned the proxy. it returned nil.
> all my instance variables were populated, everything on My end was
> correct... or at least behaving as expected. it just wouldn't return
> the proxy object (or the root for that matter)
> All I did to fix it, was to turn off garbage collection.
> That part runs like a champ now. the rest of the app won't do
> anything anymore, as it was built on garbage collection.
>
> cheers,
> -eb
>
And did you try using CFNetServices instead ? As it is CF based, it
probably does not have the same GC problem and is it far more easier
to replace NSNetService by CFNetService than rewriting the whole
application without GC .
DATE : Mon Jun 30 22:19:08 2008
Le 30 juin 08 à 22:10, eblu a écrit :
> Hi Chris,
> I'm not terribly sure what you are asking for here. From my
> experience (limited experience admittedly) theres really only one
> way to use NSConnection.
> its a pretty elegant class, which is simple, and works as expected,
> except for when garbage collection is enabled.
>
> heres what I do just after NSNetService finds a service:
>
> // Sent when a service appears
> - (void)netServiceBrowser:(NSNetServiceBrowser *)browser
> didFindService:(NSNetService *)aNetService
> moreComing:(BOOL)moreComing
> {
> NSMutableDictionary* newDict = [[NSMutableDictionary alloc] init];
> [newDict setValue:aNetService forKey:@"theService"];
>
> [serverArrayController addObject:newDict];
> [aNetService setDelegate:self];
> [aNetService resolveWithTimeout:5];
> if(!moreComing)
> {
> }
> }
>
> // NSNetService Delegate method:
> - (void)netServiceDidResolveAddress:(NSNetService *)sender{
>
> id proxy = nil;
> NSData *addy;
> NSSocketPort* socket;
> NSConnection* connection;
> NSString* hostname;
>
> int a;
> int i;
>
> hostname = [sender hostName];
> socket = (NSSocketPort*)[[NSSocketPortNameServer sharedInstance]
> portForName:@"BKOtherPort" host:hostname];
> connection = [NSConnection connectionWithReceivePort: nil sendPort:
> socket];
> @try{
> proxy = [connection rootProxy];
> }
> @catch(id exception){
> proxy = nil;
>
> }
> addy = [socket address];
> if(proxy){
> // app level stuff if the proxy exists
> }
> }
>
> pretty straight forward,
> and every time I ran it with garbage collection on, the NSConnection
> initialized, but NEVER returned the proxy. it returned nil.
> all my instance variables were populated, everything on My end was
> correct... or at least behaving as expected. it just wouldn't return
> the proxy object (or the root for that matter)
> All I did to fix it, was to turn off garbage collection.
> That part runs like a champ now. the rest of the app won't do
> anything anymore, as it was built on garbage collection.
>
> cheers,
> -eb
>
And did you try using CFNetServices instead ? As it is CF based, it
probably does not have the same GC problem and is it far more easier
to replace NSNetService by CFNetService than rewriting the whole
application without GC .






Cocoa mail archive

