UIImagePickerController mediaTypes kUTTypeMovie causes petite fuite de mémoire dans NSCFNumber
Xcode 4.0.2
iPhone4 iOS 4.3.5
CoreLocation et MobileCoreServices cadres sont mis en œuvre.
importés MobileCoreServices/UTCoreTypes.h
- (void) displayVideoPicker
{
UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
ipc.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
ipc.videoMaximumDuration = 45.0f;
ipc.videoQuality = UIImagePickerControllerQualityTypeMedium;
ipc.delegate = self;
[self presentModalViewController:ipc animated:YES];
[ipc release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[[picker parentViewController] dismissModalViewControllerAnimated: YES];
}
Instruments de reporting petite de 16 Octets de fuites sur NSCFNumber
, Cadre possible FigRemote_CreatePropertyListFromBinaryPListData
:
Objet De Fuite # Adresse De La Taille De La Responsable De La Bibliothèque Responsable De Cadre NSCFNumber,8 128 Octets MediaToolbox FigRemote_CreatePropertyListFrombinaryplistdata
Si je supprime cette ligne, la fuite s'en va:
ipc.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
J'ai essayé et ça n'a pas à se débarrasser de la fuite.
NSArray *myMediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
ipc.mediaTypes = myMediaTypes;
[myMediaTypes release];
La fuite se produit juste après la cueillette de la vidéo et revenir à la vue initiale. Toutes les pensées?
pourquoi êtes-vous casting de la constante d'une chaîne de caractères? sans regarder les docs..qui semble comme sa inutile
oh je vois..a été pensée la constante peut être un primitif, mais son CFStringRef...hmm...bien ses 16 octets, sa ne va pas à la matière honnêtement, et d'où sa se passe, il ressemble à un bug Apple lorsqu'il crée un fichier plist à partir d'un binaire plist en interne
Les deux réponses vous aider à résoudre votre problème? Veuillez sélectionner l'un d'entre eux comme votre réponse.
oh je vois..a été pensée la constante peut être un primitif, mais son CFStringRef...hmm...bien ses 16 octets, sa ne va pas à la matière honnêtement, et d'où sa se passe, il ressemble à un bug Apple lorsqu'il crée un fichier plist à partir d'un binaire plist en interne
Les deux réponses vous aider à résoudre votre problème? Veuillez sélectionner l'un d'entre eux comme votre réponse.
OriginalL'auteur marshn | 2011-08-15
Vous devez vous connecter pour publier un commentaire.
Que je suis un couple de fuites autour de la
UIImagePickerController
et ce fut l'un d'entre eux. Total fuite était de 208 octets. J'ai trouvé que si les types de médias sont spécifiées à l'aide deCoreFoundation
le code en C, cette fuite s'en va.Donc le code suivant fuites:
Peut être remplacé par le code suivant, qui ne provoque pas la même fuite:
Ma théorie est que la fuite de la déclaration n'est pas de fournir l'information que l'argument final du code du travail fournit.
kCFTypeArrayCallBacks
fournit laCFArray
créé avec les informations dont il a besoin pour bien conserver et de libérer les objets qu'il contient (à l'aide deCFRetain
etCFRelease
). Ces objets qu'il contient sontCFStringRefs..
. La fuite de la déclaration jette cesCFStringRefs
àNSStrings
et je pense que leNSArray
est en Objective-C norme de conserver et de libération des messages sur ses objets.Cette théorie semble être faux parce que
CFArray
etNSArray
sont sans frais comblé et il, il faut "juste travail". Je suis coller avec elle pour l'instant que - c'est la seule différence significative entre les deux extraits de code ci-dessus qui saute aux yeux.OriginalL'auteur themacolyte
Tout d'abord, vous devez vous assurer d'inclure le
MobileCoreServices Framework
dans votre projet Xcode, puis#import <MobileCoreServices/MobileCoreServices.h>
qui vous donne accès à la prédéfinis type de média constantes telles quekUTTypeImage
etKUTTypeMovie
.Ensuite, vous devez savoir que
mediaType
propriété s'attend à une tableau, même si elle ne contient qu'un seul élément.La-vue-contrôleur, vous mettez ce code doit être le délégué pour ces deux:
UINavigationControllerDelegate
etUIImagePickerControllerDelegate
Ensuite, vous pouvez placer ce code quelque part à l'exécuter (comme l'intérieur d'un bouton d'action):
Aussi, sur la ligne 4 de mon code ci-dessus où il est dit
camera.mediaTypes
, vous pourriez facilement faire cela ainsi:OriginalL'auteur nodebase