Обратный геокод CLGeocoder Утечка памяти - PullRequest
0 голосов
/ 21 марта 2020

Я пишу приложение, которое использует обратное геокодирование и команду CLGeocoder. Я использую Xcode 11.3 и Swift 5.

Код, который я использую, является стандартным и работает ie. Я могу выполнить обратное геокодирование нормально. Проблема заключается в том, что мое приложение вызывает геокодирование с обратным интервалом каждые 5 минут, чтобы сообщить о текущем адресе - это работает абсолютно нормально ... однако примерно через 4 дня мое приложение больше не работает на моем тесте iPhone. Когда я говорю, что больше не работает, я имею в виду, что я нажимаю на значок, чтобы открыть приложение, и оно возвращается к IOS. Когда я запускаю приложение на симуляторе, я вижу, что примерно каждые 5 минут потребление памяти увеличивается на 0,01 МБ, что позволяет предположить, что, возможно, через 4 дня память контейнеров заполнится и приложение перестанет работать должным образом.

Таким образом Итак, мой вопрос: кто-нибудь еще заметил, что при использовании обратного геокодирования в течение определенного периода времени их приложения не работают должным образом.

Я знаю, что это обратное геокодирование, как будто я не вызываю функцию, тогда потребление памяти остается постоянным c.

Я знаю, что существуют ограничения на частоту, которую вы можете вызвать обратным геолокации - может быть, Apple знает, что у нее утечка, и именно поэтому есть предел (чтобы отвлечь людей от того, что я делаю) ???

Я приложил весь стандартный стандартный код. Я немного изменил его, так как вынул элемент частоты и теперь сделал его таким образом, чтобы вы нажимали кнопку на экране, чтобы вызвать обратное позиционирование .... Приблизительно после 10 щелчков вы увидите увеличение памяти, если продолжите делать это вы продолжите видеть увеличение памяти ... (лучше всего пробовать каждые 15 - 20 секунд) ...

Мой код:

import Foundation
import UIKit
import CoreLocation


class ViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager:CLLocationManager = CLLocationManager()

    var currentLatitude: Double = 37.33030778
    var currentLongitude: Double = -122.02896839


    @IBOutlet var myButton: UIButton!



    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        locationManager.delegate = self

        print("Running")

    }


    @IBAction func myButtonPressed(_ sender: Any) {
        // Print inside IBACTION
        print("Inside IBACTION")

        // incease latitude and longitue
        currentLatitude = currentLatitude + 0.10
        currentLongitude = currentLongitude + 0.10
        myReverseGeo()
    }



    func myReverseGeo() {

        let location = CLLocation(latitude: currentLatitude, longitude: currentLongitude)

        let geocoder: CLGeocoder = CLGeocoder()

        geocoder.reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in

            if error != nil {
                let errorString = String(describing: error?.localizedDescription)

                print("Reverse Geocoding failed")
                print(errorString)

                return
            }

            let placemark = placemarks! as [CLPlacemark]

                if placemark.count > 0 {

                    let placemark = placemarks![0]

                    let eventCity = placemark.locality
                    let eventState = placemark.subAdministrativeArea
                    let eventCountry = placemark.country

                    print(eventCity!)
                    print(eventState!)
                    print(eventCountry!)

                }
        })

    }

}

First image prior to doing a Reverse Geolocation

Several minutes in after a number of calls to Reverse Geolocation

After 14 mins the utilisation is up to 12MB, after starting at 10.7MB Любые люди идеи о том, как остановить утечку памяти (кроме как не использовать обратный геокодирования) ???

...