Dear list,

In a document based app running under ARC, I've been struggling for an eternity 
to get to the bottom of an occasional crash which happens when closing a 
document. I've spent a huge amount of time working on my -tearDown procedure 
which I call in my NSDocument subclass' -windowWillClose: and which 
subsequently calls -tearDown on many other app components. I also hit the same 
crash:

[MHControlsTabBarController performSelector:withObject:]: message sent to 
deallocated instance 0x1075d2cb0

MHControlsTabBarController is a view controller whose view is added to the 
document's main window when the document loads.

In my document's -tearDown I do:

  // clean up tab bar controls
  [self.controlsTabBarController tearDown];
  self.controlsTabBarController = nil;

In [MHControlsTabBarController tearDown] I nil out various state variables. 
I've also tried various things in that -tearDown, like removing the view 
controller's view from the superview, cancelling any run loop performs by doing:

  [[NSRunLoop currentRunLoop] cancelPerformSelectorsWithTarget:self];
  [[NSRunLoop mainRunLoop] cancelPerformSelectorsWithTarget:self];

nilling out all IBOutlets, etc, but nothing helps so far.

I ran the app under instruments and I get a nice zombie message when closing 
the document. The object history is long, but the last few entries are:

#       Address Category        Event Type      RefCt   Timestamp       Size    
Responsible Library     Responsible Caller
2111    0x10a395410     MHControlsTabBarController      Retain  2       
03:29.823.791   0       TeXnicle        -[TeXProjectDocument 
controlsTabBarController]
2112    0x10a395410     MHControlsTabBarController      Autorelease             
03:29.823.792   0       TeXnicle        -[TeXProjectDocument 
controlsTabBarController]
2113    0x10a395410     MHControlsTabBarController      Retain  3       
03:29.823.792   0       TeXnicle        -[TeXProjectDocument tearDown]
2114    0x10a395410     MHControlsTabBarController      Release 2       
03:29.825.781   0       TeXnicle        -[TeXProjectDocument tearDown]
2115    0x10a395410     MHControlsTabBarController      Release 1       
03:29.825.784   0       TeXnicle        -[TeXProjectDocument 
setControlsTabBarController:]
2116    0x10a395410     MHControlsTabBarController      Release 0       
03:29.877.132   0       Foundation      -[NSAutoreleasePool drain]
2117    0x10a395410     MHControlsTabBarController      Zombie  -1      
03:31.405.789   0       AppKit  -[NSWindow sendEvent:]

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? 

There are a number of timer-based activities which check the state of this 
controls controller but in the document's -tearDown I try to stop all timers. 
The problem is, how can I ensure that all timers (and any actions already 
triggered) have stopped, before I go ahead tearing down everything else? I sort 
of need to delay the document closing somehow, but I asked about this in an 
earlier thread (this has been a loooong story) and was advised (probably 
rightly) that this was bad design. But this seems like a general problem to me, 
for which there is surely a general pattern which solves it. If I have 
timer-based activities, how do I make sure they are stopped before the rug is 
pulled from under their feet?

Many thanks for your patience with both of today's long posts. 

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