我对 GeoFire 有一个非常奇怪的问题。我敢打赌,我在某个地方引起了问题,但是现在,由于代码更改的数量非常有限,出现了 2 个主要问题:
1) GeoFire GFQuery 需要很长时间才能响应。GFQuery 需要超过 3 分钟才能最终返回位于 300 米小圆圈内的唯一键。我为启动此查询而添加的唯一代码是:
if (!self.circleQuery) {
GeoFire *geoFire = [FirebaseUtils GEOFIRE_REF];
self.circleQuery = [geoFire queryAtLocation:center withRadius:0.3];
[self.circleQuery observeEventType:GFEventTypeKeyEntered withBlock:^(NSString *key, CLLocation *location) {
}];
[self.circleQuery observeEventType:GFEventTypeKeyExited withBlock:^(NSString *key, CLLocation *location) {
}];
[self.circleQuery observeEventType:GFEventTypeKeyMoved withBlock:^(NSString *key, CLLocation *location) {
}];
} else if (![self.circleQuery.center isEqual: center]){
self.circleQuery.center = center;
}
2)只添加了上面的代码,我看到了一个重大的内存泄漏,不幸的是仪器没有捕捉到。通常,当应用程序启动时,它会在内存中闲置大约 8-9 mgbts。添加 Geofire 代码后,我看到稳步增长,并将继续增长。我隐藏了所有更改以删除任何 geofire 代码,它消除了泄漏,所以我知道它与此有关。我有一种感觉,我的两个问题都非常相关。
对此的任何帮助或想法将不胜感激!
更新:似乎我正在做的任何事情都在阻止 Firebase 进行其他更新。实现此代码时,如果我直接删除 firebase 上的子项,则无法弹出通常会立即执行的 childRemoved 通知。