dispatch_group_leave 在 swift 崩溃
dispatch_group_leave crash in swift
这种情况很少发生。这是堆栈跟踪的最后一行:
0 libdispatch.dylib 0x0000000197a85a9c dispatch_group_leave + 48
dispatch_group_leave 在一个完整的闭包中调用,调用方式如下:
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
{ () -> Void in
let query = HKStatisticsCollectionQuery(quantityType: quantityType,
quantitySamplePredicate: nil,
options: statisticOptions,
anchorDate: anchorDate,
intervalComponents: interval)
query.initialResultsHandler = {
complete()
所以我们分派到一个后台线程,运行一个HKStatisticsCollectionQuery,然后调用一个函数参数闭包调用complete。在 complete 内部是调用 dispatch_group_leave 并发生崩溃的地方。
非常感谢任何想法!
谢谢!
如果 dispatch_group_leave
调用与 dispatch_group_enter
调用不平衡,则可能会发生崩溃。
在最坏的情况下,您可以通过 debugDescription
String:
查看折扣组的 count
let count = self.groupExecuting.debugDescription.components(separatedBy: ",").filter({[=10=].contains("count")}).first!.components(separatedBy: CharacterSet.decimalDigits.inverted).filter({Int([=10=]) != nil})
assert(count.first != "0")
这个策略在这个问题中进一步探讨:DispatchGroup: check how many "entered"
这种情况很少发生。这是堆栈跟踪的最后一行:
0 libdispatch.dylib 0x0000000197a85a9c dispatch_group_leave + 48
dispatch_group_leave 在一个完整的闭包中调用,调用方式如下:
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
{ () -> Void in
let query = HKStatisticsCollectionQuery(quantityType: quantityType,
quantitySamplePredicate: nil,
options: statisticOptions,
anchorDate: anchorDate,
intervalComponents: interval)
query.initialResultsHandler = {
complete()
所以我们分派到一个后台线程,运行一个HKStatisticsCollectionQuery,然后调用一个函数参数闭包调用complete。在 complete 内部是调用 dispatch_group_leave 并发生崩溃的地方。
非常感谢任何想法! 谢谢!
如果 dispatch_group_leave
调用与 dispatch_group_enter
调用不平衡,则可能会发生崩溃。
在最坏的情况下,您可以通过 debugDescription
String:
count
let count = self.groupExecuting.debugDescription.components(separatedBy: ",").filter({[=10=].contains("count")}).first!.components(separatedBy: CharacterSet.decimalDigits.inverted).filter({Int([=10=]) != nil})
assert(count.first != "0")
这个策略在这个问题中进一步探讨:DispatchGroup: check how many "entered"