I am following the last conference of Apple about the GCD on this link:https://developer.apple.com/videos/play/wwdc2016-720/?time=33
I got to the point where it speaks of the precondition here: https://developer.apple.com/videos/play/wwdc2016-720/?time=1267, a new feature in Swift 3.
Arrived at this point: https://developer.apple.com/videos/play/wwdc2016-720/?time=1474 is used this:
my question: how this function retains object
You ask how this
First, let's step back: Let's not get lost in the details of his example. He's not saying that it will establish a strong reference, merely that it could, and therefore you should be cautious about just trying to clean up in
DataTransform retain the
BusyController? It simply could maintain a strong reference to its
observer. Note, do not conflate this custom
register method example with the standard observer methods: They're just saying "imagine that the
DataTransform object established a strong reference to
But, as he goes on to say "but you're skilled developers, and you know how to fix this problem; use a
weak reference." So, generally, we wouldn't write observation methods that maintained strong references to their observers.
But, as he goes on to say, even if you're good about avoiding strong reference cycles, the object graph can get pretty complicated, so it's not always a good idea to rely upon
deinit to clean up. He's advocating for an explicit
invalidate process, and possibly using preconditions to test that the object has been invalidated by the time
deinit is called.