On Jan 4, 2017, at 02:30 , Daryle Walker <dary...@mac.com> wrote:
> 
> I always had to guess how to retain a non-document window. I usually get it 
> after a bunch of hacking, but I want more official advice. Like I can get 
> from here.
> 
> I think there are three scenarios:
> - a window with 0 or 1 instances like an app-global photo album 
> - arbitrary number of independent windows with the same type, like a web 
> browser 
> - an auxiliary window supporting a normal one, changing its displayed data 
> when the top normal window changes. It should be hidden when no normal 
> windows are open.
> 
> Whatever retaining system is used needs to handle when a window closes. It 
> either sets a single handle to NIL, removes the pointer from an array, or 
> hides the window (still holding a retain).

It’s a little bit complicated because there is history to window management. 
For example, windows have a “release when closed” option (for historical 
reasons) that interacts with the nib-loading machinery.

However, I think the real answer to your question is pretty easy: always, 
always use a window controller for each window. The window controller manages 
the lifetime of the NSWindow object, and you manage the lifetime of the window 
controller objects by keeping a reference (to the one window controller, or an 
array of references to multiple window controllers) in a known location. It’s 
often done as a property on the application delegate object, but it could also 
be a NSWindowController-subclass static property, depending on your 
architecture.

If you’re using storyboards, you should already have one window controller per 
window. There may be nothing else to do in this case. However, I don’t know 
that there’s a direct way to get a programmatic reference to the window 
controller easily. If you need it, you may have to resort to an indirect 
technique.

If you’re using a XIB file where the window has its “visible at launch” option 
turned on, you should turn it off and create the window explicitly via the 
window controller.
_______________________________________________

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