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:

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

  • xcode и раскадровка: как создать представление профиля пользователя
  • Статическая библиотека, созданная против соединений SDK от iOS 8 с каркасом Metal
  • Выполнение расчетов атрибутов между объектами в основных данных
  • Можно ли запустить iOS-симулятор на Mac без установки Xcode?
  • Определить тип конфигурации сборки цели из статической библиотеки
  • Некоторые классы отсутствуют в папке API API Framework Google iOS
  • Нет идентификаторов - запрос администратора
  • Xcode не может найти заголовочный файл
  • Добавление функции «текст в речь» в приложение iOS
  • Модель, используемая для открытия магазина, несовместима с той, которая используется для создания хранилища Xcode 7.1
  • В xcode 6.1, построитель интерфейса, удаляющий элементы ui
  • Interesting Posts

    Измените дату релиза представления приложения ios позже, чтобы перейти к «Hold for Developer Release»

    Как получить путь к файловой системе для кэширования изображений с помощью SDWebImage (iOS)

    Может ли NSAttributedString использоваться для подключения собственных действий приложения со словами?

    Пользовательская ширина UILabel, основанная на длине текста, программно

    Какое влияние оказывают моделируемые показатели?

    Доступ к локальному хосту на Mac с XCode? Телефонная связь, связывающая Ajax с локальным Rails-приложением

    Потяните, чтобы обновить UITableView внутри UIViewController

    Вид декорации не удаляется после удаления всей строки в виде коллекции

    XCode пытается загрузить файл NIB, который я удалил из проекта

    Как использовать NSURLConnection для соединения с SSL для ненадежного сертификата?

    Как оживить счетчик при выполнении рабочей нагрузки через потоки

    Unity не компилируется в Xcode: clang: error: нет такого файла или каталога: il2cpp_output / Bulk_Assembly-CSharp-firstpass_0.cpp

    API Google Диска: программный логин

    Определение членов и свойств в Xcode 4 и iOS 4

    физический путь для моих файлов в папке «Ресурсы» XCode (для IOS)

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