Ios Xcode在SWIFT中跳过自动释放池中的全部代码
我最近发现,截图代码在截图时使用了约140Mb的临时内存,从而生成4MB的JPEG。所以我把我的截图代码放在一个自动释放池中,如下所示Ios Xcode在SWIFT中跳过自动释放池中的全部代码,ios,xcode,swift,Ios,Xcode,Swift,我最近发现,截图代码在截图时使用了约140Mb的临时内存,从而生成4MB的JPEG。所以我把我的截图代码放在一个自动释放池中,如下所示 autoreleasepool{ UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0) webView.layer.renderInContext(UIGraphicsGetCurrentContext()) image = UIGrap
autoreleasepool{
UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0)
webView.layer.renderInContext(UIGraphicsGetCurrentContext())
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
但现在当我调试时,自动释放池中的代码被完全跳过。这是我代码中唯一的自动释放池。有什么想法吗?自动释放池中的代码确实在运行。只是您确定它是否运行的方法误导了您。自动删除池中的代码确实运行。只是你确定它是否运行的方法会误导你。表单
语句{…}
实际上是一个后跟块闭包的语句
块闭包确实在运行,但调试器将其本身视为一条语句。在块内的第一行上设置一个断点,就可以逐步完成块闭包
这是autoreleasepool
的声明:
func autoreleasepool(code: @noescape () -> ())
因为它只需要一个闭包作为参数,所以我们可以随意删除paren并使用尾随闭包
有关@noescape
的解释,请参阅此问题的答案:
编辑,因为Objective-C graybeard的命名错误。表单
语句{…}
实际上是一个后跟块闭包的语句
块闭包确实在运行,但调试器将其本身视为一条语句。在块内的第一行上设置一个断点,就可以逐步完成块闭包
这是autoreleasepool
的声明:
func autoreleasepool(code: @noescape () -> ())
因为它只需要一个闭包作为参数,所以我们可以随意删除paren并使用尾随闭包
有关@noescape
的解释,请参阅此问题的答案:
编辑,因为Objective-C graybeard的命名错误。“自动释放池中的代码被完全跳过”您如何知道?在调试器下浏览代码。我可以看到控件到达行“autoreleasepool{”当我在debugger中点击next按钮时,控件到达autoreleasepool的末尾。我有代码来验证屏幕截图是否被截取。但是如果你在autoreleasepool的第一行上放置一个断点,然后运行会怎么样?你最终会不会碰到那个断点?“autoreleasepool中的代码被完全跳过”你怎么知道?在调试器下遍历代码。我可以看到控件到达“autoreleasepool”行{“当我在debugger中点击next按钮时,控件到达autoreleasepool的末尾。我有代码来验证屏幕截图是否被截取。但是如果你在autoreleasepool的第一行上放置一个断点,然后运行该怎么办?你是否最终点击了该断点?