Xcode 仪器,泄漏。 "thunk for @escaping @callee_guaranted() -> ()"的含义

标签 xcode syntax memory-leaks instruments xcode-instruments

在 Xcode Instruments 中尝试跟踪内存泄漏时,我经常在 Stack Trance 中看到这一行:

thunk for @escaping @callee_guaranteed () -> ()

这是什么意思?我什至不能翻译 thunk 词,更不用说它在这种情况下的技术意义了。完整的堆栈跟踪如下所示:
0 libsystem_malloc.dylib calloc
1 libobjc.A.dylib weak_resize(weak_table_t*, unsigned long)
2 libobjc.A.dylib weak_register_no_lock
3 libobjc.A.dylib objc_storeWeak
4 SpriteKit -[SKNode(setParent) setParent:]
5 SpriteKit -[SKNode insertChild:atIndex:]
6 SpriteKit -[SKNode addChild:]
7 IOSTest PieceNode.setup() /.../PieceNode.swift:66
8 IOSTest LabeledPieceNode.setup() /.../PieceNode.swift:86
9 IOSTest closure #1 in closure #1 in MaskedRectBoardNodeController.maskedRectBoard(_:didFill:with:alongGravity:) /.../MaskedRectBoardNodeController.swift:48
10 IOSTest thunk for @escaping @callee_guaranteed () -> () /.../<compiler-generated>:0
11 libdispatch.dylib _dispatch_call_block_and_release
12 libdispatch.dylib _dispatch_client_callout
13 libdispatch.dylib _dispatch_main_queue_callback_4CF$VARIANT$mp
14 CoreFoundation __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
15 CoreFoundation __CFRunLoopRun
16 CoreFoundation CFRunLoopRunSpecific
17 GraphicsServices GSEventRunModal
18 UIKitCore UIApplicationMain
19 IOSTest main /.../PauseMediator.swift:13
20 libdyld.dylib start

最佳答案

thunk 通常是延迟函数调用周围的框(可能添加一些上下文,并且可能需要额外的上下文才能完成)。在 Swift 中,thunk 通常用于帮助管理内存或围绕闭包的调用约定。通常,您可以忽略 thunk;这是一个实现细节。

这真正告诉您的是,您在某处泄漏了 SKNode,并且该 SKNode 是在分派(dispatch)到主队列的 block 中创建的(可能使用 DispatchQueue.main.async )。这个调用堆栈实际上与泄漏有任何关系是极不可能的。它只是告诉您泄漏对象的创建位置。

关于Xcode 仪器,泄漏。 "thunk for @escaping @callee_guaranted() -> ()"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55958834/

相关文章:

xcode - 从 Xcode 7 中的覆盖率统计数据中排除代码

ios - #if 确定.h xcode 中的设备类型

php - 网比 : PHP Syntax Checking

Haskell 空间泄漏

ios - UITableViewCell 下边距约束

ios - SKProductRequest 返回 0 作为响应

c++ - 这个使用 boost::mismatch 的例子是什么意思?

java - 为什么 eclipse 会在这里生成语法错误?

Android 泄漏金丝雀日志

使用 OpenMP 编译会导致内存泄漏