我的问题是我不确定类方法中的闭包是否会导致内存泄漏。 这是我的代码
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
}
})
}
我已经评论了我认为会导致泄漏的地方,任何人都可以告诉我,谢谢!
答案 0 :(得分:1)
有几点意见:
仅仅因为你在一个闭包中引用一个对象并不意味着你有一个强大的引用周期。你需要循环引用(例如A有强引用B和B有自己的强引用回A),以便有强引用周期,这里不会发生。
pdfDirectory
甚至不是引用类型(String
是struct
,值类型),因此无论如何都不会有强大的引用周期。只有参考类型才会发生(例如class
而不是struct
)。
即使您将NSDictionary
引入对话(参考类型),仅凭这一点还不足以实现强大的参考周期。不要在存在具有某种引用类型的闭包的情况下跳出关于强引用循环的结论。弄清楚(或使用"Debug memory graph"或Instruments)给定对象具有强引用的对象,并查看在该点确定是否存在强引用循环。