gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: DO and "leaked" connection object


From: Richard Frith-Macdonald
Subject: Re: DO and "leaked" connection object
Date: Tue, 5 Feb 2013 10:06:48 +0000

On 5 Feb 2013, at 09:42, Riccardo Mottola wrote:

> Maxthon Chan wrote:
>> Just an idea, will ARC work?
> I don't know what it ARC would do in this situation, perhaps knowing
> that can help me putting the rlease in the correct place. I don't
> like/use it. In any case I want to understand what should be done with
> the connection.
> I don't hitnk this is a seirous error, but I want to understand.

I expect if you used ARC, your program would fail rather than leaking.
The reason is, the compiler would see the instance variable go out of scope, 
and release the NSConnection object ... so your code would be unabel to accept 
incoming messages.

The rules here are nothing special ... you need to retain an object until you 
no longer want to use it.
In this case you say you want to keep the connection until the program ends (so 
you can get messages from other apps), so the correct behavior is to keep the 
object retained until the program ends ... which is what your code does.
The compiler is warning you because it sees the variable go out of scope (at 
which point it becomes impossible for you to release it), but that's harmless 
because you never want to release it.

That being said, the compiler is warning you about a bad practice ... you 
really should use a global variable or instance variable.
Not only will doing that avoid the compiler warning, it will also allow you to 
release the connection explicitly on or before program termination.

I like to invalidate and release connections immediately before shutdown, in 
order to ensure that messages from other apps don't arrive while in the process 
of shutting down.  If your app has a complicated clean-up process when it shuts 
down, an incoming message at that point could mess things up, so it's simpler 
to stop accepting messages and then do other cleanup.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]