On Apr 27, 2010, at 3:49 PM, Bill Appleton wrote:

> if i add a submenu to an item then it is retained by the menu
> 
> but then if i then set that submenu to nil is it still retained?
> 
> if retained count was accurate you could test it on final release, etc


Well, the direct answer is no, since -[NSMenuItem setSubmenu:] is just an 
accessor method, most of which in Cocoa look something like this:

- (void)setSubmenu:(NSMenu *)submenu {
        if(someIvar != submenu) {
                [someIvar release];
                someIvar = [submenu retain];

                // maybe do some other stuff
        }
}

As you can see, passing nil to a setter in a Cocoa object typically causes the 
existing ivar to be released, before the new one is set to nil. There are, of 
course, variations on this - the method could use -autorelease instead of 
-release, it could use -copy instead of -retain, it could simply be a 
@synthesized setter in Mac OS X 10.5 and higher, etc. But the one thing that is 
certain is that you don’t have to worry about this sort of thing. If NSMenuItem 
was the object that retained the submenu, then NSMenuItem is the object that 
has responsibility for releasing it, not you. Once you pass the menu to 
NSMenuItem, you can be sure that NSMenuItem will do the right thing with it, 
and the only way you need to worry about it being released is if *you* are 
retaining it. If NSMenuItem were failing to release the submenu, that would be 
a bug in NSMenuItem, and not your problem. At this stage in Cocoa’s maturity, 
such a bug in such a basic class would be quite unlikely, but even assuming 
such a bug did exist, if you attempted to “fix” the bug by releasing the 
submenu yourself, then your app would crash as soon as Apple fixed the bug with 
a software update.

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to