Search code examples
iosobjective-cmemory-managementautoreleasenszombie

how to fix over released objects


NSZombie detected that one of the objected is over released in my app and that is causing the app to crash every time when a button is pressed. However, after inspecting the source code of where the over release happens, I couldn't see any obvious code that that may have caused the release. Can xcode release objects automatically without any actual code?

Below are the places reported by the Instrument that has a release event:

-(void) takePicture:(CDVInvokedUrlCommand *)command {
    CDVCameraPicker* cameraPicker = [[CDVCameraPicker alloc] init];
    self.pickerController = cameraPicker;
    CameraOverlayViewController* overlay = [[CameraOverlayViewController alloc] initWithNibName:@"CameraOverlayViewController" bundle:nil];
    cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    cameraPicker.cameraOverlayView = overlay.view;

    [self.viewController presentViewController:cameraPicker animated:YES completion:nil];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

Any ideas on how to fix the problem? Thanks in advance!


Solution

  • I think CameraOverlayViewController is released.

    Try the below code

    CameraOverlayViewController* overlay;
        -(void) takePicture:(CDVInvokedUrlCommand *)command {
        CDVCameraPicker* cameraPicker = [[CDVCameraPicker alloc] init];
        self.pickerController = cameraPicker;
        overlay = [[CameraOverlayViewController alloc] initWithNibName:@"CameraOverlayViewController" bundle:nil];
        cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        cameraPicker.cameraOverlayView = overlay.view;
    
        [self.viewController presentViewController:cameraPicker animated:YES completion:nil];
    }