Looking at the code, it seems that `objc_destructInstance()` does not zero weak references at all in the Apple runtime. It seems to make weak references work at all, it is necessary to call into the runtime functions to allocate, retain, release and dealloc objects. Unfortunately, this does not allow to have some extra space before the object, as the current `+[alloc]` does for memory blocks belonging to the object.