Re: Attack of the Nils!
Re: Attack of the Nils!
- Subject: Re: Attack of the Nils!
- From: Michael Latta <email@hidden>
- Date: Mon, 30 Dec 2002 13:52:40 -0800
It really sounds like the variable being referenced in the second
method is not the same as the one in the first method. As an exercise
rename the variable you think is being referenced by the second method,
and verify you get the expected compile errors. If in fact they are
the same variable, look for any other assignments to that variable.
Remember a released object does not set references to nil, they just
point into garbage.
Michael
On Monday, December 30, 2002, at 01:26 PM, mw wrote:
Hello again,
I am having a serious problem in my program with nil's. No matter how
many
times I retain an object, it always gets lost!! For example, take this
piece
of code:
- (void)setController:(id <NPRolloverProtocol>)newController
{
controller = [newController retain];
[self finalInit];
}
As you can see, newController is retained and assigned to the member
variable called controller in my class. In the debugger, running this
command:
print (int)[controller retainCount]
always yields 2. So there are 2 retains on the object, right? I never,
in
any of my code, release this object because its life needs to span the
life
of the program. However, in the next function it is used in (which just
happens to be a event handler that is called when the mouse is over the
object, which is a custom control), it is ALWAYS NIL!!!! Here is the
code to
this handler, if that makes any difference:
- (void)mouseEntered:(NSEvent *)e
{
NSBundle *mainBundle = [NSBundle mainBundle];
overState = [[NSImage alloc] initByReferencingFile: [mainBundle
pathForResource:[controller getOverStatePath:self] ofType: [controller
getOverStateType:self]]];
[self setImage: overState];
[self setNeedsDisplay:YES]; // force a refresh
[overState release];
}
This is part of the same class as the setController: function is. I was
having a problem with the program where the image that is supposed to
be
returned by 'controller' wasn't being displayed properly. So I ran the
debugger, only to find that, to my dismay, 'controller' was now equal
to
<nil> and (of course) had a retain count of 0. This is so frustrating!
This
whole retaining and releasing business has got me stumped. Why can't
Cocoa's
method of handling pointers be the same as C++'s?? To create a new
pointer,
you use the new() function. When you are finished with it, you
delete() it!!
I have never been able to completely figure out how to use
retain/release,
and I have completely given up on ever using autorelease because it
always
seemed to make my programs crash. Ach!!!
Does anybody have any advice for me? I have already checked out
Stepwise.com's article on using retain and release, but it really
didn't
help any at all. I can't see any feasible reason why controller keeps
getting released from the memory stack. Can anyone else?
TIA,
mw
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.