现在我正在使用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)
}
为了防止这种泄漏,我在闭包中使用捕获列表[弱自我]:
geocoder.geocodeAddressString(location) { [weak self] (placemarks, error) in
guard let self = self else { return }
但这不能防止我的代码在同一行代码的最后一行泄漏。但是有时候,即使我删除了这个捕获列表[弱自我],如果我多次重新启动项目,此泄漏也会消失。 我做错了的人会发现这种行为的逻辑。 任何帮助表示赞赏。
答案 0 :(得分:0)
您正在尝试将此self
引用作为一种强大的捕获方法
guard let self = self else { return }
尝试简单地使用self?
并检查是否仍然存在内存泄漏问题,
这个article很棒,可以解释很多,我建议您看看