0

インストゥルメントを使用してアプリをテストしましたが、次のリークが表示されます。 ここに画像の説明を入力

スタック トレースで CameraVC をダブルクリックすると、コードの次の行が参照されます。 ここに画像の説明を入力

これは、カメラを呼び出すときに発生します。次のコードを使用して呼び出します:-

      - (IBAction) getCamera
{
    // set up our camera overlay view   
    // tool bar - handy if you want to be able to exit from the image picker...
    UIToolbar *toolBar=[[UIToolbar alloc] initWithFrame:CGRectMake(0, 480-44, 320, 44)];

    UIBarButtonItem *spaceItem  = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace  target:nil action:nil] autorelease];
    UIBarButtonItem *spaceItem1  = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace  target:nil action:nil] autorelease];
    UIBarButtonItem *cancelItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel  target:self action:@selector(cancelPickingImag)] autorelease];
    UIBarButtonItem *cameraItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera  target:self action:@selector(finishedAugmentedReality)] autorelease]; 

    spaceItem.width  = 2.0;
    spaceItem1.width = 55.0;
    NSArray *items=[NSArray arrayWithObjects:spaceItem,cancelItem,spaceItem1,cameraItem,nil];
    [toolBar setItems:items];

    // create the overlay view
    overlayView=[[OverlayView alloc] initWithFrame:CGRectMake(0, 300, 320, 480-44)];

    // important - it needs to be transparent so the camera preview shows through!
    overlayView.opaque=NO;
    overlayView.backgroundColor=[UIColor clearColor];

    // parent view for our overlay
    UIView *parentView=[[UIView alloc] initWithFrame:CGRectMake(0,0,320, 480)];
    [parentView addSubview:overlayView];
    [parentView addSubview:toolBar];
    [parentView addSubview:lbl];
    [parentView addSubview:overlayGraphicView];

    // configure the image picker with our overlay view
    //UIImagePickerController *picker=[[UIImagePickerController alloc] init];

    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeCamera])
    {
        imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

        // hide the camera controls
        imagePicker.showsCameraControls=NO;

        imagePicker.delegate = self;
        //imagePicker.allowsImageEditing = NO;

        // and put our overlay view in
        imagePicker.cameraOverlayView=parentView;
    }
    else
    {
        imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.mediaTypes = [NSArray arrayWithObjects:
                                  (NSString *) kUTTypeImage,
                                  nil];
        imagePicker.allowsEditing = NO;

    }

    [self presentModalViewController:imagePicker animated:YES];

    //Free memory 
    [imagePicker release];//,imagePicker =nil;
    [parentView release], parentView=nil;
    [overlayGraphicView release], overlayGraphicView= nil;
    [lbl release], lbl=nil;
    [overlayView release];//, overlayView =nil;
    [toolBar release], toolBar=nil;
}

どんな助けでも大歓迎です

ありがとう

4

1 に答える 1

0

parentViewで作成されています。[alloc [init...]]つまり、retained です。cameraOverlayView次に、それを のプロパティに割り当てます。つまり、再度 ed をimagePicker取得します。その割り当てを行った後、それを行うretain必要があります。release

(これはほぼ確実に「リーク」の原因ですが、「クラッシュ」を引き起こすことはありません。クラッシュが発生していると言いますが、それについてはまったく説明していません。)

于 2012-07-12T15:52:04.167 に答える