什么相当于Swift中的@autoreleasepool?

Sko*_*tch 75 nsautoreleasepool automatic-ref-counting swift

在Swift中,我注意到没有@autoreleasepool{}构造,尽管Swift确实使用ARC.在Swift中管理autoreleasepool的正确方法是什么,或者由于某种原因将其删除了?

Abh*_*ert 117

WWDC 2014会议视频编号418"使用仪器改进您的应用程序"中对此进行了详细说明,您也可以将其下载为PDF格式.

但简而言之,语法是:

autoreleasepool {
  /* code */ 
}
Run Code Online (Sandbox Code Playgroud)

  • @AbhiBeckert @SiLo这不是一个bug.`autorelease`是一个以闭包为参数的函数.这是short-hand closure-last-argument语法的一个例子. (19认同)
  • 重要的是要注意`{`**必须与`autoreleasepool`位于同一行,否则你必须将它包装在`()`中.那*真的*让我老实说实话...... (7认同)
  • @SiLo由于没有分号,如果闭包在下一行,那么就没有句法保证该闭包应该是它上面的函数的参数.当你尝试做一些像`return {...}`这样的东西时,你可以在JavaScript中看到同样的东西. (6认同)

小智 16

仅供参考,Xcode构建完整代码如下:

autoreleasepool({ () -> () in
    // code              
})
Run Code Online (Sandbox Code Playgroud)

猜猜括号标识函数闭包.

  • 不知道为什么有人会对这条评论进行去评论,因为他指出自动释放池至于swift1.2需要将代码包装在一个闭包中 (3认同)

Jos*_*erg 7

有!它在任何地方都没有真正提到过.

autoreleasepool {
    Do things....
}
Run Code Online (Sandbox Code Playgroud)