> On 4 Dec 2015, at 18:04, Quincey Morris <quinceymor...@rivergatesoftware.com> > wrote: > > On Dec 4, 2015, at 06:16 , Dave <d...@looktowindward.com > <mailto:d...@looktowindward.com>> wrote: >> >> I asked about this on Twitter to an engineer on the IB team and he confirmed >> that strong should be the default and that the developer docs are being >> updated. > > That sounds like a definitive answer. So you’re asking us because … why?
Because else where it says “weak” and when you create a Class where XCode pre-generates outlet properties it uses weak as the attribute. Which tends to suggest that they should be weak? > Here’s how I understand the situation: > > If you use a NSWindowController or NSViewController subclass to load the nib, > the controller keeps strong references to all the top-level objects in the > nib. That means all referenced objects in the nib stay alive, too — which is > to say, all of them, since the nib is a hierarchy of references. (The only > exceptions would be if relationships are changed directly by code, which is > therefore not a good idea.) > > So, from that point of view, it’d be fine for all outlets to be weak. > > However, when windows close or views are swapped out, you don’t have control > of the order of deallocation of the controllers, which means that the owner > of an outlet may see the outlet go to nil if the controller is deallocated > first. > > If the outlet owner can tolerate its outlets becoming nil, then that’s fine > too, and the outlets can be weak. > > But sometimes is tricky to handle this without crashes. (That’s why, for > example, it’s often useful to nil out the ‘delegate' property of some object > that’s using the outlet owner. It prevents delegate methods being called and > possible using a stale or nil reference to something.) It’s easier to make > the outlets strong — not to keep them alive generally, but specifically to > keep them alive as long as their owner. > > That’s an easy answer, but if that happens to cause retain cycles, then you > need to find a solution to *that* problem, which might be using a weak outlet > after all, or dealing with the situation in some other. (Nil-ing out a strong > delegate property also helps with this problem, often.) > > Summary: it’s not so very complicated, but there’s no single answer that > always works. "Always making your outlets strong, except when you are solving > a reference cycle", sounds like a good rule of thumb. > Thanks for the brilliant explanation and I agree making them strong unless they need to be otherwise seems like a good rule of thumb. All the Best Dave _______________________________________________ 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