我和GeoFire有一个非常奇怪的问题。我敢打赌,我在某个地方引起了一个问题,但现在,由于代码更改的数量非常有限,出现了两个主要问题:
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通知。
发布于 2016-04-27 04:09:39
在进一步的实验之后,我发现如果你仅仅基于对基本url的Firebase引用来构建GeoFire,那么它根本不能很好地工作。通过在url后面加上"/geofire",或者其他你想叫它的东西,我所有的问题都消失了:)。我最初使用基本url的原因是,geofire (cocoapods & github)上的所有iOS文档都引用了基本url,并且没有提到要为GeoFire创建单独的节点。对我来说,这应该使clear...memory泄漏,3分钟的响应时间是一个大问题。
https://stackoverflow.com/questions/36870067
复制相似问题