On Oct 16, 2013, at 12:57 PM, Steve Mills <smi...@makemusic.com> wrote:
> So at this point, let's finish this thread by going back to my original > question. Is it OK to use the private instance variable _itemArray in NSMenu > since the methods we've added are *extensions* of NSMenu and not a subclass? > They simply iterate over the array and ask each item for its tag and call the > same method on submenus. Below is the way it is now, with [self itemArray] > being called, which seems inefficient because it creates an immutable copy of > the array. I still don't see what mutability has to do with it, but that's a side issue. > If NSMenu were my own class, I'd definitely use the instance variable for > this sort of routine. I would too. I suspect you can safely use the instance variable, but if you're concerned about the fact that it's undocumented, or that Apple could in theory move it to the @implementation so that it's no longer visible to your code, you can accomplish the same using numberOfItems and itemAtIndex:, as I mentioned earlier. Then you're using totally public API *and* this particular method no longer instantiates any objects. Either way, I'd add a clarifying comment. --Andy > > - (NSMenuItem*)itemWithTag:(NSInteger)tag searchSubmenus:(BOOL)searchSubmenus > depthFirst:(BOOL)depthFirst > { > if(!depthFirst) { > id item = [self itemWithTag:tag]; > > if(item) > return item; > } > > if(searchSubmenus) { > for(NSMenuItem* item in [self itemArray]) { > if([item hasSubmenu]) { > NSMenuItem* subitem = [[item submenu] > itemWithTag:tag searchSubmenus:searchSubmenus depthFirst:depthFirst]; > > if(subitem) > return subitem; > } > } > } > > return [self itemWithTag:tag]; > } _______________________________________________ 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