如何摆脱这种内存泄漏

时间:2019-02-27 11:24:55

标签: swift xcode automatic-ref-counting

现在我正在使用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 }

但这不能防止我的代码在同一行代码的最后一行泄漏。但是有时候,即使我删除了这个捕获列表[弱自我],如果我多次重新启动项目,此泄漏也会消失。 我做错了的人会发现这种行为的逻辑。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您正在尝试将此self引用作为一种强大的捕获方法

        guard let self = self else { return }

尝试简单地使用self?并检查是否仍然存在内存泄漏问题, 这个article很棒,可以解释很多,我建议您看看