Swift delegation - when to use weak pointer on delegate

后端 未结 3 1801
死守一世寂寞
死守一世寂寞 2020-12-07 18:38

Can someone explain when and when not to use a \'weak\' assignment to a delegate pointer in Swift, and why?

My understanding is that if you use a protocol that is n

3条回答
  •  一生所求
    2020-12-07 19:35

    You generally make class protocols (as defined with class keyword) weak to avoid the risk of a "strong reference cycle" (formerly known as a "retain cycle"). Failure to make the delegate weak doesn't mean that you inherently have a strong reference cycle, but merely that you could have one.

    With struct types, though, the strong reference cycle risk is greatly diminished because struct types are not "reference" types, so it's harder to create strong reference cycle. But if the delegate object is a class object, then you might want to make the protocol a class protocol and make it weak.

    In my opinion, making class delegates weak is only partially to alleviate the risk of a strong reference cycle. It's really a question of "ownership". Most delegate protocols are situations where the object in question has no business claiming ownership over the delegate, but merely where the object in question is providing the ability to inform the delegate of something (or request something of it).

提交回复
热议问题