GeoFire Query требует несколько минут для ответа и вызывает утечку памяти

У меня действительно странная проблема с 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, которое обычно выполняется мгновенно.


person Michael Rose    schedule 26.04.2016    source источник


Ответы (1)


После некоторых дальнейших экспериментов я обнаружил, что GeoFire вообще не работает, если вы создаете его из ссылки Firebase только на базовый URL-адрес. Добавив к URL-адресу "/geofire" или как-нибудь еще, все мои проблемы исчезли :). Причина, по которой я использовал базовый URL-адрес, в первую очередь заключается в том, что вся документация iOS по GeoFire (cocoapods и github) ссылается на базовый URL-адрес и ничего не говорит о создании отдельного узла только для geofire. Для меня это должно быть ясно... утечки памяти и 3-минутное время отклика - БОЛЬШАЯ проблема.

person Michael Rose    schedule 26.04.2016