> If it doesn't, then we can't capture the original `-dealloc` at swizzle time since it could be changed later. So we need to call it dynamically.

That way of explaining it isn't wrong per se, but it doesn't point out why we're using `objc_msgSendSuper`.

* If the class implements `-dealloc`, we call that `-dealloc` implementation. No matter how `-dealloc` changes we keep calling that implementation.
* If the class doesn't implement `-dealloc` itself, we cannot call any specific implementation of `-dealloc`, including the currently inherited `-dealloc` implementation, because implementations of superclasses' `-dealloc` could be added or swizzled and we'd be calling the same `-dealloc` implementation there was at swizzle time. So we send a `[super dealloc]` message instead and let the runtime figure it out.