<div dir="ltr"><div>There are several functions in public API, such as dispatch_sync and dispatch_apply, which do not allow their block parameters to escape the function call.</div><div><br></div><div>However, they are not currently exposed to Swift as @noescape, meaning that users are required to specify &quot;self.&quot; or &quot;[weak self]&quot; in their closures.</div><div><br></div><div>The instances I can think of:</div><div><br></div><div>- dispatch_sync</div><div>- dispatch_barrier_sync</div><div>- dispatch_apply</div><div>- dispatch_block_perform (thanks to Pierre Habouzit for pointing this out)</div><div><br></div><div>I provided a preliminary implementation at <a href="https://github.com/apple/swift-corelibs-libdispatch/pull/6">https://github.com/apple/swift-corelibs-libdispatch/pull/6</a>, but it needs refinement. Tony Parker mentioned commented that there might be similar changes to make for the swift-corelibs-foundation project.</div><div><br></div><div>Thoughts?</div><div><br></div><div>Question: does __attribute__((noescape)) have the same meaning when applied to C function pointers? Namely, does Swift understand @noescape as it applies to @convention(c)?</div><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div>Jacob Bandes-Storch<br></div></div></div></div>
</div>