> On Jun 30, 2017, at 1:47 PM, Mike Ferenduros via swift-users 
> <swift-users@swift.org> wrote:
> 
> I'm doing a RAII sort of thing with an object, and would like to keep it 
> alive until an completion-block is called (asynchronously).
> 
> Is it sufficient to say '_ = x' in the completion-block to keep a live 
> reference to the object?
> 
> I was told that the optimiser is free to discard this line, and thus the 
> object could be freed prematurely depending on how the code is compiled. If 
> so, is there an idiomatic way to do this? Or should I just avoid RAII in 
> Swift?

Nope. In fact, if you try this, you’ll find that it dies immediately after the 
initializer returns:

class C {
        deinit { print("Deinit!") }
}

do {
        print("Creating")
        _ = C()
        print("Created")
}
print("Left the block”)

- - - - -

Creating
Deinit!
Created
Left the block

Charles
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to