iPhone mapView / mapKit segítségével removeAnnotation & addAnnotation eredményeket memóriavesztés?

szavazat
1

Ha frissíteni a helyét egy GPS mutató mapView ...

[mapView removeAnnotation:myGpsAnnotation];
[myGpsAnnotation release];
myGpsAnnotation = nil;
myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS];
[mapView addAnnotation:myGpsAnnotation];

... látom nettó memória lassan mászni Instruments (szimulátor). Nem „szivárgás” felvillanás, de a „Net bájt” és „# Net” lassan megnő ... hacsak ezt a kódot megjegyzésbe. Tehát nem vagyok 100% -ig biztos ez a jogsértő kódot.

De ha a következő ...

[mapView removeAnnotation:myGpsAnnotation];
[myGpsAnnotation release];
myGpsAnnotation = nil;
myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS];
[mapView addAnnotation:myGpsAnnotation];
[mapView removeAnnotation:myGpsAnnotation];
[mapView addAnnotation:myGpsAnnotation];
[mapView removeAnnotation:myGpsAnnotation];
[mapView addAnnotation:myGpsAnnotation];

... akkor a „Net bájt” és „# Net” sokkal jobban nő. Lehetséges ez nem az én hibám, és próbálom lenyomozni egy szivárgás MapKit? Én tényleg szivárog a memória? Ismét semmi nem jelenik meg a „rés”, de akkor nem értem, hogy miért a nettó értékeket kellene folyamatosan emelkedik.

Köszönet minden segítséget, -Gord

A kérdést 04/02/2010 23:34
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
2

A kibocsátási ciklus hibás:

myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS]; 
//retain count = 1

[mapView addAnnotation:myGpsAnnotation]; 
//retain count = 2 (the map does an extra retain)

[myGpsAnnotation release]; 
//retain count = 1
myGpsAnnotation = nil; //not really necessary

[mapView removeAnnotation:myGpsAnnotation]; 
//retain count = 0 -> dump (you can do this on the original place; I put it here to show the cycle)

PS. A memória növeli látod valószínűleg az annotationVIEWS. Ezek cache-e a térképen. Ha továbbra is növekedést mem talán Ön szerint dequeueing rossz.

PPS. ment egyszerűen csak beállítása az új helyét a kommentár. Sokkal egyszerűbb, ha a helyét az egyetlen dolog, ami megváltoztatja.

myGpsAnnotation.coordinate = region.center;
Válaszolt 10/03/2011 11:55
a forrás felhasználó

szavazat
1

Először meg kell érteni, hogyan működik gyűjteménye.

Hozzáadása és tárgy gyűjtemény tartja.
Objektum törlése gyűjtemény engedje el.

Az Ön esetében ez egy térkép nézet:


  1. Hozzáadása után a kommentár térképnézetbe, akkor engedje el, ha a saját referencia.
  2. Miután eltávolított egy kommentárt a térképen, nem kell ot engedje el.

 MyClass *obj=[[MClass alloc] init];
 [mapview addObject:obj];
 [obj release];
 ...
 [mapview removeAnnotation:obj];

Ez az. Nem kell, hogy kiadja itt.

Válaszolt 04/03/2011 08:38
a forrás felhasználó

szavazat
0

Ha megfigyeljük ezt a tesztelés közben a szimulátort, ne aggódj. Úgy tűnik, hogy a térképen kit gyorstárazza térképrészletekre a memóriában futó szimulátor, miközben a készülék, akkor az SQLite tárolására térképrészletekre, és nem a korlátozott RAM a készüléken.

Válaszolt 13/02/2010 18:29
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more