iOS6 MKMapView en utilisant une tonne de mémoire, au sharepoint planter l’application, quelqu’un d’autre le remarque?

Quelqu’un d’autre, qui utilise des cartes dans ses applications iOS 6, a-t-il remarqué une utilisation extrêmement importante de la mémoire au sharepoint recevoir des avertissements de mémoire au sharepoint bloquer l’application?

J’ai couru l’application via des instruments et je ne vois aucune fuite et jusqu’à ce que la vue de la carte est créée, l’application tourne régulièrement autour d’environ 3 Mo d’octets actifs. Une fois que la carte est créée et que les tuiles sont téléchargées, les octets actifs passent à environ 13 Mo d’octets actifs. Puis, alors que je déplace la carte et que je fais un zoom avant et arrière sur les continus Live Bytes, vous pouvez grimper jusqu’à ce que l’application plante à environ 40 Mo d’octets actifs. Ceci est sur un iPhone 4 par la voie. Sur un iPod touch, il se bloque encore plus tôt.

Je réutilise les vues d’annotation correctement et rien ne fuit. Quelqu’un d’autre voit-il cette même utilisation de mémoire élevée avec les nouvelles cartes iOS 6? De plus, quelqu’un at-il une solution?

Après avoir essayé et testé différentes idées, dont certaines ont été mentionnées ici, la solution finale a été la suivante.

  • Au lieu de créer de nouvelles MKMapView selon les besoins de l’application, j’ai ajouté une propriété mkMapView à mon AppDelegate et je ne l’ai créée qu’en cas de besoin. Une fois qu’il a été créé, il vit pour toujours dans AppDelegate et je réutilise cette instance unique partout où cela est nécessaire. Cela a vraiment aidé à réduire la quantité de mémoire utilisée car j’instanciais auparavant plusieurs différents MKMapView et les deux gravaient assez rapidement dans la mémoire.

  • J’ai également constaté que iOS 6 Maps gère très bien la libération de mémoire une fois qu’un avertissement de mémoire a été reçu. Oui, il utilise plus de mémoire lors du zoom et du panoramique, mais semble répondre correctement aux avertissements de mémoire.

  • La dernière chose à faire était de réduire mon empreinte mémoire initiale. J’ai remarqué que je commençais plus haut que prévu, ce qui a également consortingbué aux accidents liés à la mémoire que je recevais. Une fois l’encombrement initial obtenu, laissez MKMapView gérer la libération de sa mémoire lors des alertes de mémoire et assurez-vous de n’avoir qu’une seule instance de MKMapView que je pourrais réutiliser dans toute l’application, tout fonctionne correctement.

J’ai aussi ce problème et ça me rend fou. En essayant de trouver un correctif basé sur le post de mateo, voici ce que j’ai imaginé:

 - (void)applyMapViewMemoryHotFix{ switch (self.mkMapView.mapType) { case MKMapTypeHybrid: { self.mkMapView.mapType = MKMapTypeStandard; } break; case MKMapTypeStandard: { self.mkMapView.mapType = MKMapTypeHybrid; } break; default: break; } [self.mkMapView removeFromSuperview]; self.mkMapView = nil; } 

Je ne sais pas pourquoi, mais la combinaison de la suppression de la vue d’ensemble et de la mise à zéro réduit vraiment l’utilisation de la mémoire. J’appelle cette méthode dans le viewDidDisappear du contrôleur.

D’autres choses que j’ai essayées mais sans effet significatif:

1) Créer autoreleasepool autour de alloc init de mkMapView

2) Réglage de la région affichée autour du lat 84 l30 -30, car je pensais que les informations vectorielles dans l’Arctique n’étaient peut-être pas aussi denses … Cependant, cela n’aide pas;)

Ce problème est très grave et provoque l’instabilité de notre application et provoque des tonnes d’avertissements de mémoire dans iOS 6. J’espère que Apple publiera un meilleur correctif que le mien … bientôt !!

Veuillez critiquer mon correctif et proposer des méthodes plus efficaces pour réduire l’utilisation de la mémoire lors de la suppression d’une carte. Merci!

Je ressens le même problème.

La mémoire n’est jamais libérée après zoom et change d’emplacement.

Le seul truc que j’ai trouvé est de changer le type de carte après l’avertissement de mémoire.

Ce problème est toujours présent dans iOS 9, sauf si vous le faites.

Segue to et from a view controller avec une vue cartographique configurée dans un story-board provoque un plantage (pour moi) après environ 10-15 cycles d’affichage et de fermeture.

Maintenant, il semble que le correctif est simple. Ajouter ceci

 override func viewDidDisappear(animated: Bool) { super.viewDidDisappear(animated) mapView.removeFromSuperview() } 

Semble avoir résolu le problème, le cycle peut aller et venir de plus de 20 fois, et aucun problème. Pas de crash!!

J’espère que cela t’aides. C’était un problème frustrant et heureux que ce soit résolu.

Mon empreinte était: 2,48; 19,51; 49,64; 12.60 qui est: Mémoire avant de charger la mapView, après le chargement de mapView, après un zoom avant / arrière, et après avoir libéré la mapView (ce qui est assez ennuyeux, même après avoir libéré la mapView, je garde un incrément de 10Mo vers le bas!)

Quoi qu’il en soit, je n’utilise plus un IBOutlet pour MapView, je crée tout dans le code à la place. La nouvelle empreinte est maintenant: 2,48; 19,48; 38,42; 12.54.

Toujours en train de mettre le bi *** en panne.

Pas une solution mais simplement un truc …

… changez mapType => mapkit release memory.

Même si ce changement est pour une fraction de seconde.

J’ai le même sentiment et je ne sais pas comment release cette memory , même lorsque MKMapView n’est pas utilisé.

J’ai publié le contrôleur, MKMapView , vue par conteneur … la memory est toujours utilisée.

N’oubliez pas de faire l’expérience avec l’ancien MKMapView dans iOS5.

 - (void)applyMapViewMemoryHotFix{ switch (self.mapView.mapType) { case MKMapTypeHybrid: { self.mapView.mapType = MKMapTypeStandard; } break; case MKMapTypeStandard: { self.mapView.mapType = MKMapTypeHybrid; } break; default: break; } self.mapView.mapType = MKMapTypeStandard; } -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { [self applyMapViewMemoryHotFix]; } 

Je reçois le même numéro –

Je ne suis pas tout à fait sûr de cela, mais est-ce que les nouvelles cartes Apple préchargent une grande partie de la carte pour permettre la navigation hors ligne?

Si vous désactivez votre connexion après le chargement de la carte, essayez de zoomer sur des zones situées à proximité de l’emplacement souhaité, mais il semble y avoir énormément de détails disponibles.

Pour ceux qui travaillent ici en 2014+ (iOS8 et plus)

Je suis confronté à ce problème sur iOS 7+ en essayant de prendre en charge les anciens appareils (pensez à Ipad 2 avec 512 Mo).

Ma solution consiste à désactiver le zoom car il prend facilement le plus de mémoire.

  long mem = [NSProcessInfo processInfo].physicalMemory; if(mem < _memory_threshold){ self.MapView.zoomEnabled = NO; } 

J'ai tout essayé, du changement de type de carte à la désallocation de la carte, en définissant le délégué sur zéro, en supprimant tous les recouvrements, annotations, etc.

Rien de tout cela fonctionne sur iOS7 +. En fait, la plupart de ces correctifs provoquent des sauts de mémoire, car MKMapView semble fuir et ne se disperse jamais correctement (j'ai vérifié par sous-classement que je voyais hitloc frappé).

Cela est nul, mais tout ce que j'ai imaginé jusqu'à présent est de désactiver les fonctionnalités de carte (zoom, défilement, interactions utilisateur) pour limiter la quantité de mémoire atroce que MKMapView prend. Cela a abouti à mon application à tout le moins être semi-stable sur les anciens appareils.

Pas sûr des conséquences.

Le réglage de la carte sur «nil» à chaque fois que la vue disparaît m’a aidé à réduire l’utilisation de la mémoire de ~ 250 Mo à ~ 50-60 Mo.

 -(void)viewDidDisappear:(BOOL)animated { self.map = nil; } 

Seules les lignes suivantes suffisent à résoudre le problème de mémoire:

Pour Objective-C:

 - (void) applyMapViewMemoryFix { [self.mkMapView removeFromSuperview]; self.mkMapView = nil;} 

Pour Swift 3.0:

 func applyMapViewMemoryFix() { mapView.removeFromSuperview() self.mapView = nil }