【发布时间】:2016-12-30 06:16:55
【问题描述】:
我的应用相当多地使用了 firebase 的 observeSingleEventOfType,我开始意识到我的应用的内存会随着时间的推移而增加。除了调用以下函数的测试按钮外,我已经注释掉了所有代码。
func loadPostsTest() {
FIRDatabase.database().reference().child("posts").observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in
print(snapshot.value)
})
}
程序启动时,我以大约每秒 2.3 次的速度快速按下测试按钮,观察内存图如下所示。内存在请求后上升并且不会下降。从长远来看,这个问题对我的应用程序的影响相当大,因为我的应用程序的内存将从 70mb 增长到 150+mb。这有什么原因吗?
注意,短暂的五秒休息让我停下来确保打印出所有“快照”。
注意 2... 当我停止按下按钮时,内存保持在“短暂休息部分”中所示的相同水平。以防你认为它会无限期地自行生长
-------更新---------
为了进一步确认问题,我创建了一个全新的项目,其中除了 firebase 导入之外什么都没有,故事板上的一个按钮带有以下代码并在我的 6s 上模拟(在模拟器上模拟似乎没有这个问题)。下图证明了 Firebase 发生了一些可疑的事情,因为我的内存在一分钟左右的时间内从 11.1mb 变为 17.3mb,有 303 个请求。
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
})
}
【问题讨论】:
-
当您使用
.observeEventOfType时,这种情况是否仍然存在 -
是的。但是,结果略有不同。 ObserveEventOfType 的上升速度比 ObserveSingleEventOfType 慢一点。
-
等等,这很有趣,我自己测试一下......
-
确实...在我的实际代码中似乎是最糟糕的,其中有多个变量和函数可以从我的数据库中获取点点滴滴(如第一张图片所示)
-
嘿,我什至做了一个全新的应用程序来验证你的理论.....不检查!,你的快照太大了吗?完成后确保删除观察者..
标签: ios swift xcode firebase firebase-realtime-database