session.swift deinit 中的 Alamofire 崩溃:

Alamofire crash in session.swift deinit:

我正在从事 Swift 项目,我使用 alamofire 处理网络。此崩溃仅发生在 14.6.0 及以上 OS 版本。我已为 creating/cancel 会话附上以下代码:

会话创建:

func sessionManager() -> Session {   
    //SSL pining
        instantiateTrustKit()
        if let manage = self.manager {
            return manage
        }
        else {
            let configuration = URLSessionConfiguration.default
            configuration.timeoutIntervalForRequest = 30
            self.manager = Session(configuration: configuration, delegate: CustomDelegate())
            guard let sessionManager = manager else {
                return Session.default
            }
            return sessionManager
        }
    }
    

取消正在进行的请求:

func cancelAllRequests() {
        sessionManager().session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
            dataTasks.forEach {
                [=12=].cancel() }
            uploadTasks.forEach {
                [=12=].cancel() }
            downloadTasks.forEach {
                [=12=].cancel() }
        }
}



Crash Stack trace:
    Crashed: com.apple.root.background-qos
0  libobjc.A.dylib                0x25dd0 objc_release + 16
1  Alamofire                      0xb4b90 Session.deinit + 204 (Session.swift:204)
2  Alamofire                      0xb4c2c Session.__deallocating_deinit + 202 (Session.swift:202)
3  libswiftCore.dylib             0x383c98 _swift_release_dealloc + 40
4  libswiftCore.dylib             0x384b90 bool swift::HeapObjectSideTableEntry::decrementStrong<(swift::PerformDeinit)1>(unsigned int) + 288
  1. 在发送请求时,我们调用了 sessionManager 函数来获取当前会话。
  2. 当用户第一次打开应用程序并导航到主屏幕时,将调用 取消请求 函数。

有谁知道上面的问题吗?

如果您转到 Xcode 菜单“产品”»“方案”»“编辑方案...”»“运行”»“诊断”并打开“地址消毒器”,然后“Detect use of stack after return”,它将帮助您在未来识别和解决这些问题: