0

我对 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 通知。

4

1 回答 1

0

经过一些进一步的实验后,我发现如果您仅根据基本 url 的 Firebase 引用构建 GeoFire,它根本无法正常工作。通过将“/geofire”或您可能想要调用的任何其他名称附加到 url,我的所有问题都消失了 :)。我首先使用基本 url 的原因是 GeoFire(cocoapods 和 github)上的所有 iOS 文档都引用了基本 url,并且没有说任何关于为 geofire 创建单独的节点的内容。对我来说,这应该说清楚......内存泄漏和 3 分钟的响应时间是一个大问题。

于 2016-04-26T20:09:38.543 回答