У меня действительно странная проблема с 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 мгб в памяти. После добавления кода Geofire я вижу неуклонный рост, который будет продолжать расти и расти. Я спрятал все изменения, чтобы удалить любой код geofire, и это устранило утечку, поэтому я знаю, что это как-то связано с этим. У меня такое ощущение, что обе мои проблемы ОЧЕНЬ связаны.
Любая помощь или идеи по этому поводу будут очень признательны!
ОБНОВЛЕНИЕ: кажется, что все, что я делаю, также блокирует Firebase от других обновлений. Когда этот код реализован, если я удаляю дочерний элемент в firebase напрямую, ему не удается вывести уведомление childRemoved, которое обычно выполняется мгновенно.