iPhone MapView / bellek sızıntısı removeAnnotation & addAnnotation sonuçlarını kullanarak mapKit?

oy
1

MapView üzerinde GPS göstergesinin yerini güncellemek için ...

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

... Ben net bellek yavaş yavaş Aletleri (simülatör) tırmanış görüyoruz. Bu kod dışarı yorum sürece hiçbir Kaçak bip ama net Bayt ve # Net yavaş yavaş ... artan. Bu yüzden bu kusurlu kodudur% 100 eminim.

AMA ben Aşağıdakileri yaparsanız ...

[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];

... sonra Net Bayt ve # Net çok daha hızlı artar. Bu benim hatam değil ve ben MapKit bir sızıntı izini çalışıyorum mümkün mü? Gerçekten bellek sızıntısı muyum? Yine, hiçbir şey Sızıntı altında görünür, ancak net değerleri sürekli tırmanma nedenlerine sonra görmüyorum.

Herhangi bir yardım için teşekkürler, -Gord

Oluştur 04/02/2010 saat 23:34
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
2

Salıverilme döngüsü yanlıştır:

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. Hafıza Eğer annotationVIEWS muhtemelen görmek artırır. Bunlar harita ile önbelleğe alınır. Hala mem artış görürseniz muhtemelen görünümü dequeueing yanlıştır.

PPS. Sadece ek açıklama için yeni bir konum ayarı düşünün etmedi. Konumu Değişen tek şey ise çok daha kolay.

myGpsAnnotation.coordinate = region.center;
Cevap 10/03/2011 saat 11:55
kaynak kullanıcı

oy
1

Önce toplama nasıl çalıştığını anlamak gerekir.

Ekleme ve koleksiyona nesne onu koruyacaktır.
Koleksiyonundan nesne kaldırma bunu yayınlayacak.

Senin durumunda bir harita görünümü var:


  1. Eğer başvuru sahibi eğer harita görünümüne ek açıklama ekledikten sonra, onu serbest olmalıdır.
  2. Harita görünümünden bir şerh çıkardıktan sonra bırakın ot gerekmez.

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

Bu kadar. Gerek burada serbest bırakmak için.

Cevap 04/03/2011 saat 08:38
kaynak kullanıcı

oy
0

Eğer simülatörü bu süre test gözlemleyerek ise, endişelenmeyin. Cihaz, bir cihaz üzerinde sınırlı bir RAM harita fayans depolamak için kullanan SQLite olup ise simülatörü çalışırken harita kiti bellekte harita fayans önbelleğe gibi görünüyor.

Cevap 13/02/2010 saat 18:29
kaynak kullanıcı

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