ios - 它会在快速类方法中导致内存泄漏吗

标签 ios memory-leaks swift3

我的问题是我不确定类方法中的闭包是否会导致内存泄漏。 这是我的代码

class func SomeDownloadFun (pdfDirectory:String) {   

      let destination : DownloadRequest.DownloadFileDestination = {
            _, response in

//----------HERE I Reference the item 'pdfDirectory'-----Will this cause leak?
            let fileURL = URL(fileURLWithPath: pdfDirectory)

            return (fileURL,[.removePreviousFile,.createIntermediateDirectories])
        }


        let downLoadRequest = Alamofire.download(urlStr!, to: destination)

 downLoadRequest.responseData(completionHandler: { (response) in

                switch response.result {
                case .success:

//----------HERE I Reference the item 'pdfDirectory'-----Will this cause leak?

                    print("pdfDirectory")


                    break

                case .failure:
                    print("down err")
                    break

                }

            })

Aa 我已经注释掉了我认为会导致泄漏的地方,谁能告诉我,谢谢!🙏

最佳答案

一些观察:

  1. 仅仅因为您在闭包中引用了一个对象并不意味着您有一个强引用循环。您需要循环引用(例如,A 对 B 有强引用,B 对 A 有自己的强引用),以实现强引用循环,这在此处不会发生。

  2. pdfDirectory 甚至不是引用类型(String 是一个 struct,一种值类型),所以可以无论如何,这是一个强大的引用周期。它只会发生在引用类型上(例如 class 而不是 struct)。

即使您将 NSDictionary 引入到对话中(引用类型),仅凭这一点也不足以形成强大的引用循环。不要基于某些引用类型的闭包的存在就得出关于强引用循环的结论。找出(或使用 "Debug memory graph" 或 Instruments)给定对象对哪些对象具有强引用,并确定此时是否存在强引用循环。

关于ios - 它会在快速类方法中导致内存泄漏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450294/

相关文章:

ios - UITableViewCellAccessoryCheckmark 未在 iOS 7 中显示

c# - 从 ActiveX 调用时未释放 WPF 内存

python - 如何使用 pandas 查找内存泄漏

c++ - 将 SharedPtr 与 std::list 一起使用时出现内存泄漏!漏洞?

ios - UNUserNotificationCenter Swift - 在特定情况下不触发本地通知

swift - 快速访问C变量

ios - 如何使用 swift 3 推送以编程方式制作的 View Controller

ios - App Thinning - Bitcode 的例子?

Objective-c 每 10 个字符换行一次(保持文字完整)

ios - UIApplicationShortcutItem 的 AppDelegate 函数未在 Swift 3/Xcode 8 beta 6 中调用