Xcode在SWIFT中跳过autoreleasepool中的整个代码

时间:2015-06-06 23:33:21

标签: ios xcode swift

我最近发现截图代码在截取导致4MB JPEG的屏幕截图时使用了~140Mb的临时内存。因此,我将截屏代码附加到SWIFT

中的自动释放池中
    autoreleasepool{
        UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0)
        webView.layer.renderInContext(UIGraphicsGetCurrentContext())
        image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
    }

但是现在当我调试时,autoreleasepool中的代码被完全跳过。这是我的代码中唯一的自动释放池。关于什么是啊?的任何想法?

2 个答案:

答案 0 :(得分:3)

表单statement {...}实际上是一个语句,后跟 block 闭包。

闭包实际上正在运行,但调试器将其视为单个语句本身。在块内的第一行设置断点,您将能够单步执行闭包。

这是autoreleasepool

的声明
func autoreleasepool(code: @noescape () -> ())

因为它只需要一个闭包作为参数,所以我们可以自由地删除parens并使用尾随闭包。

有关@noescape@noescape attribute in Swift 1.2

的说明,请参阅此问题的答案

编辑,因为Objective-C灰胡子的命名错误。

答案 1 :(得分:2)

autoreleasepool中的代码运行。只是你确定是否运行的方法会误导你。