现在我正在使用Xcode中的Leaks工具,这段代码的最后一行有一个漏洞:
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(location) { (placemarks, error) in
if let error = error {
print(error)
return
}
guard let placemarks = placemarks else { return }
let placemark = placemarks.first
let annotation = MKPointAnnotation()
annotation.title = self.place.name
annotation.subtitle = self.place.type
guard let placemarkLocation = placemark?.location else { return }
annotation.coordinate = placemarkLocation.coordinate
self.mapView.showAnnotations([annotation], animated: true)
self.mapView.selectAnnotation(annotation, animated: true)
}
为了防止这种泄漏,我在闭包中使用捕获列表[weak self]:
geocoder.geocodeAddressString(location) { [weak self] (placemarks, error) in
guard let self = self else { return }
但这并不妨碍我的代码在同一代码的最后一行泄漏。但有时如果我重新启动我的项目几次,即使我删除了这个捕获列表[弱自我],这个泄漏也会消失。我做错了什么人可以找到这种行为的逻辑。任何帮助表示赞赏。
你正在使这个self
参考强烈捕获它尝试在这,
guard let self = self else { return }
尝试简单地使用self?
并检查是否还有内存泄漏问题,这个article很棒解释很多我建议你看看它