@joshaber We need to dynamically look up and call the super implementation, never matters how it is done.
It may be the current way with `objc_msgSendSuper`:
```objective-c
struct objc_super superInfo = {
    .receiver = self,
    .super_class = class_getSuperclass(classToSwizzle)
};
void (*msgSend)(struct objc_super *, SEL) = (__typeof__(msgSend))objc_msgSendSuper;
msgSend(&superInfo, deallocSelector);
```
Or for example:
```objective-c
Method superDeallocMethod = class_getInstanceMethod(class_getSuperclass(classToSwizzle), deallocSelector);
void (*superDealloc)(__unsafe_unretained id, SEL) = (__typeof__(superDealloc))method_getImplementation(superDeallocMethod);
superDealloc(self, deallocSelector);
```
Both ways do exactly the same thing. Just a matter of style.

P.S.
@jspahrsummers Why do we need `msgSend` variable? Why not just `objc_msgSendSuper(&superInfo, deallocSelector);`? It has appropriate declaration: `id objc_msgSendSuper(struct objc_super *super, SEL op,  ...)`.