NSDocument never deallocated with autosave/versions
NSDocument never deallocated with autosave/versions
- Subject: NSDocument never deallocated with autosave/versions
- From: Graham Cox <email@hidden>
- Date: Wed, 30 May 2012 12:05:44 +1000
I've got a large memory leak in my app because my document class is never deallocated once I've added content to it.
I've been over it with a fine-toothed comb and I'm prepared to say it doesn't look as if I'm doing anything wrong. I overrode -retain and set a breakpoint there, so I could see who is retaining the document. Of course, many, many objects do in the complicated new world of autosaving, versions and blocks.
Every single retain on NSDocument comes from the internals of Cocoa - my code never retains the document at all.
The key object that seems never to release my document is the NSSavePanel that is displayed only when I have added content, and I close the window. The save panel is shown, and the retain count shoots right up. If I click 'Don't Save', the window closes as expected but the document is still retained - the retain count does not go back down to the point it was at prior to the dialog showing up, and dealloc is never called.
Key point: If I disable autosaving for my document class, the document is deallocated as expected.
What I want to know is, is this behaviour correct? It doesn't seem to be correct but it could be - perhaps Versions is retaining my document after its normal lifetime for its own purposes? Obviously I understand that peeking retain counts is a bad strategy for debugging, but just looking at the general trend here, the document ticks over at about a retain count of 3 or 4. When the save dialog is presented, it can shoot up to 17-20 counts, and on closure this drops back to about 12. With autosave/versions disabled, it goes to zero.
If Versions is retaining documents for some reason, fair enough, I guess I have to accept it. But it causes awkward bugs because of the clean up I expect to do in -dealloc, like unsubscribing from notifications and so on. I'm also a bit uneasy about having large objects like this which are heavily customised in my app hanging around because Cocoa thinks it knows what to do with them - surely it can't know how a particular class has been subclassed and always do the right thing? The way Versions works seems really quite scary to me.
--Graham
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden