"weak" is also inherently incompatible with KVO, because no notification is 
sent when the weak reference goes away. And that'll wreak havoc, especially 
when you are using Cocoa Bindings.

Gerd

> On Dec 6, 2015, at 05:52, Dave <d...@looktowindward.com> wrote:
> 
>> 
>> 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/gerti-cocoadev%40bitart.com
> 
> This email sent to gerti-cocoa...@bitart.com


_______________________________________________

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