2009-09-03 7 views
1

En plus de ma question "La suppression des annotations MKMapView provoque des fuites." J'ai découvert que si vous créez un projet basé sur une vue, ajoutez un UISearchBar et un MKMapView dans la NIB de la vue, reliez les délégués (je ne crée aucune méthode car nous n'avons pas besoin de faire quoi que ce soit pour déclencher les fuites), lien dans le MapKit et lancer le projet, puis en cliquant simplement dans l'UISearchBar provoque une fuite de 1k +. Cela ne se produit pas à moins que vous avez à la fois UISearchBar et MKMapView dans une vue. J'ai les mêmes problèmes lors de la création des vues à partir du code. Je pensais qu'un NIB pourrait se comporter différemment, mais ce n'est pas le cas. Est-ce que MKMapView fuit, ou est-ce que je fais quelque chose de mal?Est-ce que MKMapView fuit

Pour reproduire le problème avec le code essayer le code ci-dessous - j'ai créé un nouveau projet "d'application de la vue"

TestMapViewFromCodeViewController.h

 
#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface TestMapViewFromCodeViewController : UIViewController { 
    UISearchBar *searchBar; 
    MKMapView *mapView; 

} 

@property (nonatomic, retain) MKMapView *mapView; 
@property (nonatomic, retain) UISearchBar *searchBar; 


@end 

TestMapViewFromCodeViewController.m

 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UISearchBar * tmpSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width,40.0)]; 
    [self.view addSubview:tmpSearchBar]; 
    [self setSearchBar:tmpSearchBar]; 
    [tmpSearchBar release]; 

    MKMapView *tmpMapView=[[MKMapView alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width,self.view.frame.size.height)]; 
    tmpMapView.showsUserLocation=FALSE; 
    [self.view insertSubview:tmpMapView atIndex:0]; 
    [self setMapView:tmpMapView]; 
    [tmpMapView release]; 
} 


- (void)dealloc { 
    [mapView release]; 
    [searchBar release]; 
    [super dealloc]; 
} 

Bien que j'ai retenu le s ubviews avec mapView et searchBar, il est probablement inutile de répliquer le problème.

En testant ce code avant la publication ici, je viens de remarquer que cette fuite ne se produit pas dans le simulateur - que sur mon téléphone ...

+1

Que diriez-vous du code? En fonction de votre propre réponse à votre autre question, je pense que vous devriez revoir le guide de gestion de la mémoire pour le SDK. Je sais que quand j'ai commencé sur l'iPhone, j'ai été victime de nombreuses fuites, parce que ça faisait longtemps que je n'avais pas de ramasse-miettes. –

+0

Aucun code requis - Il suffit de déposer un UISearchBar, puis un MKMapView dans une vue dans IB. C'est tout ce qui est nécessaire pour le reproduire. Cependant, je vais creuser la version du code quand je suis devant mon Mac. – Andiih

+0

code publié ci-dessus. J'ai également remarqué que cette fuite ne se produit que sur mon appareil (pas dans le simulateur). Je n'ai pas encore mis à jour la version de l'iPhone OS donc c'est toujours sur 3.0.1. – Andiih

Répondre

2

Oui.

Il existe des fuites connues sur les MKMapViews de la version 3.0. La fuite se produit lorsque vous libérez le MKMapView Ceci est corrigé dans les versions ultérieures. La solution de contournement consiste à avoir un seul MKMapView et à le réutiliser.

https://devforums.apple.com/message/129740#129740