Firebase observSingleEvent остается в памяти

Мое приложение довольно хорошо использует firebase для наблюдения за сайтомEventOfType, и я понял, что память моего приложения увеличивается со временем. Я прокомментировал весь мой код, кроме кнопки тестирования, которая вызывает следующую функцию.

func loadPostsTest() { FIRDatabase.database().reference().child("posts").observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in print(snapshot.value) }) } 

Когда программа запускается, я быстро нажимаю тестовую кнопку примерно 2,3 раза в секунду и наблюдаю график памяти, как показано ниже. Память поднимается и не возвращается после запроса. Из-за этого проблема в моем приложении довольно неплохая, так как память моего приложения будет расти с 70 до 150 + мб из-за этого. Любая причина для этого?

Обратите внимание, что в течение короткой пятисекунды я остановился, чтобы убедиться, что все «снимки» распечатаны.

Примечание 2 … Когда я перестаю нажимать кнопку, память остается на том же уровне, что и в разделе «короткий отдых». Просто вы можете думать, что он растет сам по себе бесконечно

образ памяти

——-ОБНОВИТЬ———-

Чтобы еще раз подтвердить эту проблему, я создал совершенно новый проект, в котором нет ничего, кроме импорта firebase, кнопки в панели рассказов со следующим кодом и симуляции на моих 6-х (симуляция на симуляторе, похоже, не возникает). Образ ниже доказывает, что здесь есть что-то подозрительное, когда моя память переместилась с 11.1mb до 17.3mb с 303 запросами в течение минуты или около того.

memoryleak2

 import UIKit import Firebase class ViewController: UIViewController { var count: Int = 0 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } @IBAction func testBtnPressed(sender: AnyObject) { FIRDatabase.database().reference().child("posts").observeSingleEventOfType(.Value, withBlock: {[weak self] (snapshot: FIRDataSnapshot) in print(self?.count) self?.count += 1 }) } 

2 Solutions collect form web for “Firebase observSingleEvent остается в памяти”

Вероятно, это происходит только потому, что вы выполняете сборку отладки. Мои результаты, после ~ 128 кликов на устройстве с отладочной сборкой:

Увеличение потребления памяти после ~ 128 кликов на устройстве.

Как вы можете видеть, подавляющее большинство потребления памяти связано с инструментами производительности, связанными с отладкой. Вы можете отключить эту функцию, если хотите ее подтвердить, отредактировав свою схему:

отредактируйте свою схему

А затем отключить запись заднего хода:

Отключить запись в обратном направлении.

При отключенном состоянии те же ~ 128 кликов практически не показывают роста:

Нет увеличения потребления памяти после ~ 128 кликов на устройстве.

Конечно, вы можете не захотеть оставить это отключенным, так как вы можете найти его полезным для диагностики сбоев и других проблем в своих отладочных сборках. Это не должно быть проблемой в сборке релизов!

Для справки, это был код, который я запускал:

 import UIKit import FirebaseDatabase class ViewController: UIViewController { @IBOutlet weak var label: UILabel! private var count: Int = 0 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } @IBAction func testBtnPressed(sender: AnyObject) { let db = FIRDatabase.database().reference() db.child("posts").observeSingleEventOfType(.Value) { [weak self] (snap: FIRDataSnapshot!) in guard let this = self else { return } this.count = this.count + 1 this.label.text = "\(this.count)" } } } 

Я так думаю, это поможет в xcode. Я сделал это в своем приложении для Android.

 DatabaseReference ref = FirebaseDatabase.getInstance().getReference("BLAH_BLAH_STRING"); // Attach a listener to read the data at our posts reference ref.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // Do Some Stuff ref.removeEventListener(this); ref = null; } @Override public void onCancelled(DatabaseError databaseError) { } }); 

Или в iOS, я думаю, у них есть разные методы, которые нужно использовать.

removeAllObservers и removeObserverWithHandle:

Пожалуйста, попробуйте указанные выше методы.

  • Добавить макрос BETA = 1 в Xcode для определенных схем?
  • В Swift будущие новые API-интерфейсы будут переопределены пользовательскими методами в существующих приложениях в App Store?
  • Кто-нибудь видел, предупреждение: target указывает SWIFT_VERSION = '2.3'
  • xcode разматывать программно
  • Инструменты для поиска полного текста в наборе iOS
  • Alamofire: : FAILURE: Error Domain = NSURLErrorDomain Code = -999 «отменен»
  • Почему UINavigationBar отключил часть моего UIBuilder, но не отключил его при тестировании?
  • Свойство SKMutablePayment: applicationUsername
  • Поиск строк в строчном массиве в объекте c
  • Xcode был разбит после добавления ART.xcodeproj в библиотеку
  • Приложение Jenkins IOS Не удалось выполнить FATAL: не была настроена глобальная команда разработчиков или идентификатор локальной команды
  • Interesting Posts

    Изменение значения диапазона слайдера диапазона

    Сортировка списка по расстоянию с помощью обратного геолокации

    Как обмениваться изображениями в instagram? Swift

    Есть ли эквивалент API для распознавания активности Android в iOS?

    Пользовательская панель кнопок iOS. Ширина элемента всегда установлена ​​на 44?

    Поиск хорошего учебника по телефонным записям для iphone

    Как написать массив const в GLSL ES

    iOS: Как истечь локальное уведомление с помощью триггера области?

    Использовать свойства immiedatly или использовать временные переменные во время настройки?

    Менеджер местоположений, дающий старые местоположения с новыми отметками времени

    Прикосновение анимации Force Touch замерзает, если ее слегка коснуться

    Значение Emoji для Hex в ios

    Поддержка родного JSON в iOS?

    Прокрутка в UITableView, встроенная в UITableviewCell (ios7)

    Firebase Cloud Messaging Подписаться на несколько токенов в тему

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.