> 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

Reply via email to