This was held for moderation for being too large (for some reason), so I've 
trimmed it and resent it.

>> 
>> Should I interpret this as a window trying to message the object?  Am I 
>> somehow over-reasling? Under ARC, I can't, right? If it's not coming from a 
>> window, how can I figure out which object is trying to message this 
>> deallocated MHControlsTabBarController? 
> 
> I think there's a bit more information here than you think.
> 
> Yes, the view controller is being messaged because your window is processing 
> an event. I'll come back to this in a minute.
> 
> First, we can winnow the history in two stages:
> 
> -- Ignore the retain and release from 'tearDown', since those are balanced.
> 
> -- Ignore the retain/autorelease from 'controlsTabBarController' and the 
> balancing release in 'drain'.
> 
> That leaves this:
> 
>> 2115 0x10a395410     MHControlsTabBarController      Release 1       
>> 03:29.825.784   0       TeXnicle        -[TeXProjectDocument 
>> setControlsTabBarController:]
> 
> and there's every indication this is the 'self.controlsTabBarController = 
> nil' you showed earlier in your message. Since the retain count goes from 1 
> to 0 here, there shouldn't be any remaining references to the view 
> controller. But there is one, as your crash proves. There are two 
> possibilities:
> 
> 1. You have a simple memory management bug where you overreleased the view 
> controller, likely when you initially put its value in the 
> '_controlsTabBarController' ivar (or whatever it's called) that backs the 
> "controlsTabBarController" property.

I always use self.controlsTabBarController - I don't directly access the 
backing ivar anywhere.

> 
> 2. The remaining reference is unretained.
> 
> If it's #1, it shouldn't be too hard to find. At worst, you might have to go 
> through the whole Instruments history matching things.
> 
> If it's #2, it can be harder to find, but the 'sendEvent:' message is an 
> excellent clue. Why would a window, dispatching an incoming event, send a 
> message to a view controller? Well, normally it won't. It's going to 
> transform the event into a NSResponder message and send it to something in 
> the responder chain, and normally view controllers *aren't* in the responder 
> chain.
> 
> But it does send it to the view controller! My conclusion is that you put the 
> view controller in the responder chain yourself, and you forgot to take it 
> out. This accords with #2, because it's unlikely you *retained* the view 
> controller before adding it to the responder chain.

Ahh, this may be going in the right direction. I do:

self.controlsTabBarController = [[MHControlsTabBarController alloc] init];
[self.controlsTabBarController setNextResponder:self.mainWindow.nextResponder];
[self.mainWindow setNextResponder:self.controlsTabBarController];  

So I should explicitly remove self.controlsTabBarController from the responder 
chain in my -tearDown method?

OK, in my -tearDown I've inserted

  [self.mainWindow 
setNextResponder:self.controlsTabBarController.nextResponder];

before doing 

  [self.controlsTabBarController tearDown];
  self.controlsTabBarController = nil;

After a short amount of testing, I haven't had a crash. So the frequency, at 
least, has reduced. Maybe this even fixes the problem. Under the Zombies 
Instrument, I no longer get a zombie when closing documents. 


> 
> Note that I say "you", but it might of course have been done by a 3rd party 
> library or some code you don't have direct knowledge of.

No, probably 'you' was correct here.

> 
> Anyway I would suggest you investigate both #1 (by further examining your 
> code for memory management errors, and winnowing the full Instruments history 
> of the object) and #2 (to understand which presumably-unretained reference is 
> being used for the zombie messaging).
> 
> 

Looking forward to your further thoughts on this,

Martin






_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to