我的问题是我不确定类方法中的闭包是否会导致内存泄漏。 这是我的代码
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 我已经注释掉了我认为会导致泄漏的地方,谁能告诉我,谢谢!🙏
最佳答案
一些观察:
仅仅因为您在闭包中引用了一个对象并不意味着您有一个强引用循环。您需要循环引用(例如,A 对 B 有强引用,B 对 A 有自己的强引用),以实现强引用循环,这在此处不会发生。
pdfDirectory
甚至不是引用类型(String
是一个struct
,一种值类型),所以可以无论如何,这是一个强大的引用周期。它只会发生在引用类型上(例如class
而不是struct
)。
即使您将 NSDictionary
引入到对话中(引用类型),仅凭这一点也不足以形成强大的引用循环。不要基于某些引用类型的闭包的存在就得出关于强引用循环的结论。找出(或使用 "Debug memory graph" 或 Instruments)给定对象对哪些对象具有强引用,并确定此时是否存在强引用循环。
关于ios - 它会在快速类方法中导致内存泄漏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450294/