[swift-users] Postponing owned object deinitialization

Ole Begemann ole at oleb.net
Mon Feb 27 12:53:30 CST 2017


On 27/02/2017 19:34, Nate Chandler via swift-users wrote:
> Hi Ole,
>
> A quick follow-up--are you suggesting calling withExtendedLifetime
> inside the closure passed to async, as below?
>
> class AsyncHandle {
>
>     let handle: Handle
>
>     deinit {
>         let handle: Handle = self.handle
>         q.async {
>             withExtendedLifetime(handle) {}
>         }
>     }
> }

Yes, that's what I'm suggesting. Sorry I didn't make that clear before. 
Since you mentioned that you couldn't use the stdlib's _fixLifetime 
function, I just wanted to point out that there is a public function in 
the stdlib for this purpose.

> If so, it seems that that may be a final answer to (3).  It does raise
> an additional question, however:
>
> (6) Would we expect calling withExtendedLifetime to have different
> behavior from calling an @inline(never) function from a closure enqueued
> async from deinit?

Yeah, I don't know the answer, sorry.



More information about the swift-users mailing list