如何摆脱这种内存泄漏

问题描述 投票:1回答:1

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

但这并不妨碍我的代码在同一代码的最后一行泄漏。但有时如果我重新启动我的项目几次,即使我删除了这个捕获列表[弱自我],这个泄漏也会消失。我做错了什么人可以找到这种行为的逻辑。任何帮助表示赞赏。

swift xcode automatic-ref-counting
1个回答
0
投票

你正在使这个self参考强烈捕获它尝试在这,

        guard let self = self else { return }

尝试简单地使用self?并检查是否还有内存泄漏问题,这个article很棒解释很多我建议你看看它

© www.soinside.com 2019 - 2024. All rights reserved.