2010-04-01 2 views
2

Ceci est le code de l'exemple Addmusic d'Apple.Fuite de mémoire MPMediaickerController identifiée par l'instrument Leaks

MPMediaPickerController *picker = 
    [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic]; 

picker.delegate      = self; 
picker.allowsPickingMultipleItems = YES; 
picker.prompt      = NSLocalizedString (@"Add songs to play", "Prompt in media item picker"); 

// The media item picker uses the default UI style, so it needs a default-style 
//  status bar to match it visually 
[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault animated: YES]; 

[self presentModalViewController: picker animated: YES]; 
[picker release]; 

J'utilise ce code dans mon application et l'instrument Fuites met en évidence une fuite sur la ligne:

[self presentModalViewController: picker animated: YES]; 

Je pense que cela est parce que cette ligne conserve une référence au sélecteur qui ne peut pas être ensuite libéré.

Y a-t-il un moyen de contourner ce problème ou des fuites identifient-elles incorrectement une fuite?

+0

avez-vous trouvé la solution à ce problème? Même pour l'exemple "AddMusic" MPMediaPickerController d'Apple, les Instruments affichent une augmentation de 100 Ko de l'utilisation de la mémoire chaque fois que l'on ouvre simplement le sélecteur et qu'on l'annule ensuite avec le bouton Terminé. – zubko

Répondre

0

Il peut être libéré par un appel à dismissModalViewControllerAnimated:

+0

Cela signifie-t-il que Instruments a identifié de façon incorrecte une fuite parce que je rejette la commande "MessageModalViewControllerAnimated": plus loin dans le code? – Joe

+0

Je ne suis pas sûr. Je me demande pourquoi la ligne de [sélecteur] est là, pourquoi le code appelant le relâcherait-il s'il ne l'a pas conservé? Le sélecteur –

+0

est conservé avec la ligne [MPMediaPickerController alloc], il doit donc être libéré avec [release du sélecteur] – Joe