On Oct 16, 2013, at 4:20 PM, Steve Mills <smi...@makemusic.com> wrote:
> On Oct 16, 2013, at 12:56:00, Andy Lee <ag...@mac.com> wrote: > >> As for the creeping memory footprint, maybe try Heapshot Analysis to see >> what objects are being created during particular intervals? > > Aha! Thanks, I didn't know about this very helpful debugging aid yet. I was > getting about a meg worth of junk every time I brought up a multi-panel > dialog that loads 26 nibs, with most of the objects rooted in a call to > instantiateNibWithOwner. Looking that method up, I see it's been deprecated > and replaced by instantiateWithOwner in 10.8. I tried that instead and now > it's only growing by a few measly k every time. This is *much* better. But, > we still need to support 10.7. So it looks like we'll just have to leak all > this crap in 10.7 and run the newer method on 10.8 and up. Aha, that definitely explains the leaks you've been getting. The trouble with instantiateWithOwner:, and the reason it's been deprecated, is because it doesn't follow the standard Cocoa memory management rules. Specifically, it retains the top-level objects, and leaves it your responsibility to release them, even though you never alloced, copied them, or retained them. There are three ways to deal with this: 1. Have an outlet to each top-level object in the nib, and make sure to release them all when your object deallocates. 2. Store the array returned as the second parameter of -instantiateWithOwner:topLevelObjects:, and when your object deallocates, loop through the array and release everything. 3. (This is the one I'd recommend) Instead of using NSNib, make a subclass of NSWindowController (if your nib defines a window) or NSViewController (if your nib defines a view). Then use either -[NSWindowController initWithWindowNibName:] or -[NSViewController initWithNibName:bundle:] to load the nib. This will produce correct behavior on any version of OS X, including 10.7, and gives you a few other niceties as well. Charles _______________________________________________ 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