我最近发现截图代码在截取导致4MB JPEG的屏幕截图时使用了~140Mb的临时内存。因此,我将截屏代码附加到SWIFT
中的自动释放池中 autoreleasepool{
UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0)
webView.layer.renderInContext(UIGraphicsGetCurrentContext())
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
但是现在当我调试时,autoreleasepool中的代码被完全跳过。这是我的代码中唯一的自动释放池。关于什么是啊?的任何想法?
答案 0 :(得分:3)
表单statement {...}
实际上是一个语句,后跟 block 闭包。
块闭包实际上正在运行,但调试器将其视为单个语句本身。在块内的第一行设置断点,您将能够单步执行块闭包。
这是autoreleasepool
:
func autoreleasepool(code: @noescape () -> ())
因为它只需要一个闭包作为参数,所以我们可以自由地删除parens并使用尾随闭包。
有关@noescape
:@noescape attribute in Swift 1.2
编辑,因为Objective-C灰胡子的命名错误。
答案 1 :(得分:2)
autoreleasepool
块中的代码运行。只是你确定是否运行的方法会误导你。