2016-04-26 4 views
0

Ich habe ein wirklich seltsames Problem mit GeoFire. Ich werde wetten, dass ich irgendwo ein Problem verursacht habe, aber jetzt, mit der sehr begrenzten Menge an Code-Änderung, sind 2 wichtige Probleme aufgetaucht:GeoFire Abfrage dauert einige Minuten, um zu reagieren und Speicherverlust zu verursachen

1) GeoFire GFQuery braucht eine lange Zeit, um zu antworten. Es dauert 3 Minuten, bis GFQuery endlich den ONLY-Schlüssel in einem kleinen 300-Meter-Kreis zurückgibt. Der einzige Code, den ich hinzugefügt haben, um diese Abfrage zu starten, ist dies:

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) nur mit dem angezeigten Code hinzugefügt wurde, ich bin eine große Speicherleck zu sehen, die leiden Instrumente nicht zu kontrollieren. Normalerweise, wenn die App startet, verbraucht sie 8-9 mg im Speicher. Nach dem Hinzufügen des Geofire-Codes sehe ich einen stetigen Anstieg, der weiter zunehmen wird. Ich habe alle Änderungen gespeichert, um alle Geofire-Codes zu entfernen, und es entfernt das Leck, so dass ich weiß, dass es etwas damit zu tun hat. Ich habe das Gefühl, dass beide Probleme SEHR verbunden sind.

Jede Hilfe oder Ideen zu diesem würde sehr geschätzt werden!

UPDATE: Es scheint, dass das, was ich gerade mache, auch Firebase daran hindert, andere Updates vorzunehmen. Wenn dieser Code implementiert wird, kann ich die childRemoved-Benachrichtigung sofort löschen, wenn ich ein untergeordnetes Element direkt in Firebase lösche.

Antwort

0

Nach einigen weiteren Experimenten habe ich herausgefunden, dass GeoFire überhaupt nicht gut funktioniert, wenn Sie es von einem Firebase-Verweis auf nur die Basis-URL erstellen. Durch Anhängen von "/ geofire", oder was auch immer Sie es nennen möchten, an die URL, gingen alle meine Probleme weg :). Der Grund, warum ich die Basis-URL überhaupt benutzte, ist, dass die gesamte iOS-Dokumentation auf GeoFire (cocaapods & github) die Basis-URL referenziert und nichts über das Erstellen eines separaten Knotens nur für Geofire aussagt. Zu mir sollte das klar gemacht werden ... Speicherlecks und 3 Minuten Reaktionszeit sind ein großes Problem.