<div dir="ltr">You should probably use `<a href="https://developer.apple.com/documentation/swift/1541033-withextendedlifetime">withExtendedLifetime(_:_:)</a>` for this.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 30, 2017 at 2:54 PM, Charles Srstka via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">&gt; On Jun 30, 2017, at 1:47 PM, Mike Ferenduros via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; I&#39;m doing a RAII sort of thing with an object, and would like to keep it alive until an completion-block is called (asynchronously).<br>
&gt;<br>
&gt; Is it sufficient to say &#39;_ = x&#39; in the completion-block to keep a live reference to the object?<br>
&gt;<br>
&gt; 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?<br>
<br>
</span>Nope. In fact, if you try this, you’ll find that it dies immediately after the initializer returns:<br>
<br>
class C {<br>
        deinit { print(&quot;Deinit!&quot;) }<br>
}<br>
<br>
do {<br>
        print(&quot;Creating&quot;)<br>
        _ = C()<br>
        print(&quot;Created&quot;)<br>
}<br>
print(&quot;Left the block”)<br>
<br>
- - - - -<br>
<br>
Creating<br>
Deinit!<br>
Created<br>
Left the block<br>
<br>
Charles<br>
______________________________<wbr>_________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-users</a><br>
</blockquote></div><br></div>