I think the code is generally broken, as we discussed earlier. Or I might be mistaken; the discussion is out of my cache. The problem with both the old and the new version is that the same IVar gets reused in each loop iteration, so I do not know which future will actually update it. I'm also wary of the ivar_destroy in the original version since the IVar has been returned. Or maybe the destroy does not touch the dynamically allocated part of an IVar? But what is its purpose in that case?

So; it was not explicitly intentional, but I think it is the right thing since 'e0' is an alias for '*out' and should not deallocate the memory.