UIImagePickerController mediaTypes kUTTypeMovie führt zu kleinen memory-leak in NSCFNumber
Xcode 4.0.2
iPhone4 iOS 4.3.5
CoreLocation und MobileCoreServices frameworks umgesetzt werden.
importiert 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];
}
Instrumente ist die Berichterstattung kleinen 16-Byte-Leckagen auf NSCFNumber
möglich Rahmen FigRemote_CreatePropertyListFromBinaryPListData
:
Undichte Objekt # Anschrift Größe Verantwortlich Bibliothek Verantwortlich Rahmen NSCFNumber,8 128 Bytes MediaToolbox FigRemote_CreatePropertyListFrombinaryplistdata
Wenn ich diese Zeile zu entfernen das Leck verschwindet:
ipc.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
Ich hab das versucht und es hat nicht loszuwerden, die Auslaufen.
NSArray *myMediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
ipc.mediaTypes = myMediaTypes;
[myMediaTypes release];
Das Leck tritt auf, unmittelbar nach dem pflücken werden die video-und die Rückkehr in die ursprüngliche Ansicht. Irgendwelche Gedanken?
warum wirfst du die Konstante in einen string? ohne Blick auf die docs..das scheint wie seine unnötigen
oh, ich sehe..dachte die Konstante könnte eine primitive, aber seine CFStringRef...hmm...naja die 16 bytes, es ist nicht die Materie, ehrlich, und von wo Ihr geschieht, sieht es aus wie ein Apple-bug, wenn er es schafft eine plist aus einem binären plist intern
Hat einer von den beiden Antworten, die Ihnen helfen, Ihr problem lösen? Bitte wählen Sie eine von Ihnen als Antwort akzeptiert.
oh, ich sehe..dachte die Konstante könnte eine primitive, aber seine CFStringRef...hmm...naja die 16 bytes, es ist nicht die Materie, ehrlich, und von wo Ihr geschieht, sieht es aus wie ein Apple-bug, wenn er es schafft eine plist aus einem binären plist intern
Hat einer von den beiden Antworten, die Ihnen helfen, Ihr problem lösen? Bitte wählen Sie eine von Ihnen als Antwort akzeptiert.
InformationsquelleAutor marshn | 2011-08-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin immer ein paar Lecks rund um den
UIImagePickerController
- und dies war einer von Ihnen. Insgesamt Leck 208 bytes. Ich fand, dass, wenn die Medientypen angegeben sind, mitCoreFoundation
C-code, das Leck verschwindet.Also den folgenden code leaks:
Kann ersetzt werden durch den folgenden code, der nicht die gleiche Ursache Leck:
Meine Theorie ist, dass die undichte Stelle-Anweisung ist nicht die Bereitstellung der Informationen, dass das Letzte argument, das von den funktionierenden code liefert.
kCFTypeArrayCallBacks
bietet dieCFArray
erstellt mit Informationen, die es braucht, um richtig zu halten und lassen Sie die Objekte, die es enthält (mitCFRetain
undCFRelease
). Diese Objekte, die es enthält, sindCFStringRefs..
. Die undichte Aussage wirft dieseCFStringRefs
zuNSStrings
und ich denke, dieNSArray
ist mit Objective-C standard halten und freigeben von Nachrichten auf seine Objekte.Diese Theorie scheint falsch, weil
CFArray
undNSArray
sind gebührenfrei überbrückt und es soll "einfach funktionieren". Ich bin kleben mit es für jetzt aber - es ist der einzige signifikante Unterschied zwischen den beiden code-snippets oben, springt bei mir.InformationsquelleAutor themacolyte
Zuerst müssen Sie sicher sein, um die
MobileCoreServices Framework
in Ihr Xcode-Projekt, dann#import <MobileCoreServices/MobileCoreServices.h>
wodurch Sie Zugriff auf die vordefinierten Medien-Typ Konstanten wiekUTTypeImage
undKUTTypeMovie
.Dann müssen Sie wissen, dass
mediaType
Eigenschaft erwartet eine array, auch wenn es enthält nur ein element.Des view-Controllers stecken Sie diesen code muss der Delegierte für diese beiden:
UINavigationControllerDelegate
undUIImagePickerControllerDelegate
Dann kann man diesen code irgendwo haben es ausgeführt werden (wie innerhalb einer button-Aktion):
Auch auf der Linie 4 von meinem code oben, wo es heißt
camera.mediaTypes
Sie könnte einfach tun dies auch:InformationsquelleAutor nodebase