Mon application utilise assez souvent la fonction observeSingleEventOfType de Firebase et je me suis rendu compte que la mémoire de mon application augmente avec le temps. J'ai commenté tout mon code à l'exception d'un bouton de test qui appelle la fonction suivante.
func loadPostsTest() {
FIRDatabase.database().reference().child("posts").observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in
print(snapshot.value)
})
}
Lorsque le programme démarre, j'ai appuyé sur le bouton de test à une vitesse rapide environ 2,3 fois par seconde et j'ai observé le graphique de la mémoire comme indiqué ci-dessous. La mémoire augmente et ne redescend pas après la demande. Ce problème affecte mon application de manière assez importante à long terme, car la mémoire de mon application passe de 70 mb à 150+ mb à cause de cela. Quelle est la raison de ce problème ?
Notez que le court repos de cinq secondes est dû au fait que je m'arrête pour m'assurer que tous les "instantanés" sont imprimés.
Note 2... Lorsque je cesse d'appuyer sur le bouton, la mémoire reste au même niveau que celui indiqué dans la "courte section de repos". Juste au cas où vous penseriez qu'elle se développe d'elle-même indéfiniment.
-------UPDATE----------
Pour confirmer le problème, j'ai créé un tout nouveau projet avec rien d'autre que l'importation de firebase, un bouton dans le story board avec le code suivant et simulé sur mon 6s (la simulation sur simulateur ne semble pas avoir ce problème). L'image ci-dessous prouve qu'il y a quelque chose de louche avec firebase car ma mémoire est passée de 11.1mb à 17.3mb avec 303 requêtes en une minute environ.
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
})
}