This is for the same reason that, in general, many Cocoa delegates are not weak. Large parts of Cocoa are not recorded using ARC - because they precede it. They manage memory manually, as we used to do in the good old days. Thus, they do not enjoy the ARC weak (which means weak
here). They use the clean, non-memory-driven assignment of delegates (and data sources). They do not save it, so there is no save cycle; but since they do not use ARC, they are not protected from failures.
Thus, you are responsible for ensuring that such a delegate does not die during the life of the primary instance, so that he does not try to send a message to a dangling pointer and a failure.
You can see this by experiment (this is Objective-C, but you can easily see the point):
self->_obj = [NSObject new]; nav.delegate = self->_obj
A crash like this is exactly what prevents the ARC-weak because it automatically replaces the drop-down pointer with nil - and the noil message in Objective-C is harmless.
source share