2012-05-23 20 views
5

Ich benutze UIImagePickerController in meiner Anwendung Entwicklung auf iOS5 & XCode4.2, Speicherverlust und ich habe keine Ahnung, warum ich dieses Leck bekommen kann Sie bitte geben Sie mir die Antwort dafür.UIImagePickerController Speicherleck auf iOS5

here i am attaching my screen shot:

und mein Code:

-(void)createImagePicker 
{ 
_picker = [[UIImagePickerController alloc] init]; 
_picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

_picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 

_picker.allowsEditing = YES; 
_picker.showsCameraControls = NO; 


_picker.cameraDevice = UIImagePickerControllerCameraDeviceRear; 

_picker.delegate = self; 
_picker.wantsFullScreenLayout = YES; 

} 

und viewWillApper Methode:

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeCameraButton:) name:@"ShowMainView" object:nil]; 
    [self createImagePicker]; 
    [m_cameraOverlayView setBackgroundColor:[UIColor clearColor]]; 
    [self presentModalViewController:_picker animated:NO]; 
    _picker.cameraOverlayView = m_cameraOverlayView; 

    [cameraImgView setHidden:YES]; 
    [filterView setHidden:YES]; 
    m_cameraOverlayView.hidden = NO; 
    cameraSelectedButton.hidden = NO; 
    cancelButton.hidden = YES; 
    selectButton.hidden = YES; 

    for (id Object in [scrollview subviews]) 
    { 
     if([Object isKindOfClass:[UIButton class]]) 
     { 
      [Object removeFromSuperview]; 
     } 
    } 

    [m_toolbarImage setFrame:CGRectMake(0, 427, 320, 55)]; 
    [cameraSelectedButton setFrame:CGRectMake(128, 432, 86, 44)]; 

    [m_cancelButton setFrame:CGRectMake(10, 434, 82, 40)]; 
    [m_cancelButton setTitle:@"Close" forState:UIControlStateNormal]; 
    [m_cancelButton setBackgroundImage:[UIImage imageNamed:@"menu-bar-button.png"] forState:UIControlStateNormal]; 
    [m_cancelButton setTitleColor:[UIColor colorWithRed:110/256.0 green:52/256.0 blue:28/256.0 alpha:1.0] forState:UIControlStateNormal]; 


    [cancelButton setFrame:CGRectMake(120, 434, 35, 35)]; 
    [selectButton setFrame:CGRectMake(184, 434, 35, 35)]; 

    } 
+0

Wenn Sie tatsächlich das betreffende Verfahren veröffentlichen, anstatt einen Bildschirm holen, könnte es helfen! Vor allem Ihre 'createImagePicker' Methode ... – lxt

+0

@lxt meine Frage bearbeitet –

+0

Ich nehme an, irgendwann rufen Sie' [_picker release] '? – lxt

Antwort

2

Sie sollten [_picker release]; nennen Eigentum an _picker Speicher zu verzichten, wie in dem Apple-Memory-Management-Docs beschrieben.

+0

Die Frage ist mit ARC eingeschaltet. Daher kann "Freigabe" nicht aufgerufen werden. – Tikkes

+0

@ edo42 ja, wie tikkes sagte, das ist in iOS5, so kann ich nicht aufrufen –

+0

Er hat nicht angegeben, dass ARC ON war – edo42

3

Gerade gesehen, dass auch der Quellcode von Apple here Lecks mit dem gleichen Problem verknüpft haben wir ...

1

ich viele anderen Beiträge zu diesem Thema lesen. Jemand sagt, dass es ein Apple-Problem ist, und deshalb schlug Zillian vor, dass das PhotoPicker-Beispiel ebenfalls leckt. Die Problemumgehung besteht darin, nur eine Instanz von UIImagePickerController zu erstellen, wahrscheinlich als Singleton, und diese niemals zu veröffentlichen (oder sie von ARC für Sie freigeben zu lassen). Auf diese Weise verwenden Sie immer die gleiche Instanz und es wird wahrscheinlich weniger Zeit verlieren.

+0

Ich versuchte dies, aber das hat auch nicht funktioniert. Es wird immer noch auf genau die gleiche Weise lecken.Einige Leute vorgeschlagen, einige andere Dinge auf [meine Frage] (http://stackoverflow.com/questions/10752917/memory-leak-on-presentmodalviewcontroller) aber keiner von ihnen schien für mich zu arbeiten. Ich würde das gerne beheben, aber bisher hatte ich kein Glück dabei. – Tikkes

+0

Ich habe nicht gesagt, dass das Leck weggehen wird, nur versuchen, es zu reduzieren. Es ist kein großes Problem, ein Leck in Ihrer App zu haben. – edo42

4

Dies scheint ein Problem mit UIImagePickerController in iOS 5, ob mit ARC oder nicht.

Ich habe eine App für iOS 4 mit xcode 3.2.5 entwickelt und Instruments zeigt keine Lecks, wenn ein Foto entweder aus der Bibliothek genommen oder ausgewählt (getestet auf einem Gerät mit iOS 4.1). Derselbe Code, der auf einem Gerät getestet wurde, auf dem iOS 5.1 ausgeführt wird, ist wie beschrieben undicht.

Ich weiß, das ist keine Antwort, aber das Problem scheint breiter als die ursprüngliche Frage.

+0

Der Speicherverlust in UIImagePickerController scheint beim Scrollen zu vorkommen, um ein Foto auszuwählen. Wenn Sie ein Foto ohne Scrollen auswählen, tritt das Leck nicht auf. Aber wenn Sie die Fotos scrollen (vorausgesetzt, Sie haben genug Fotos zum Scrollen), tritt das Leck auf, selbst wenn Sie kein Foto auswählen, wodurch das Problem ausgeschlossen wird, dass es sich um meinen Code handelt. –