> 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