Как избавиться от этой утечки памяти - PullRequest
0 голосов
/ 27 февраля 2019

Теперь я работаю с инструментом Leaks в XCode, и в последней строке этого фрагмента кода есть одна утечка:

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)
    }

Чтобы предотвратить эту утечку, я использую список захвата [слабый self] взакрытие:

geocoder.geocodeAddressString(location) { [weak self] (placemarks, error) in

        guard let self = self else { return }

Но это не предотвращает утечку моего кода в той же последней строке кода.Но иногда, если я перезапускаю свой проект несколько раз, эта утечка исчезает, даже если я удаляю этот список захвата [слабый я].То, что я делаю неправильно, ребята могут найти логику в этом поведении.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 27 февраля 2019

Вы делаете эту ссылку self сильной фиксацией, попробуйте в этом,

        guard let self = self else { return }

Попробуйте просто использовать self? и проверьте, есть ли еще утечка памяти, эта статья удивительно объясняет многое, я рекомендую вам взглянуть на это

...