2

我正在为用户打开相机拍照。当我拍照并按下“使用”时,我不断出现内存泄漏:[self presentModalViewController:imagePicker animated:YES],

完整代码:

imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;      
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
                              (NSString *) kUTTypeImage,
                              (NSString *) kUTTypeMovie, nil];
imagePicker.allowsEditing = NO;

[self presentModalViewController:imagePicker animated:YES]; //This leaks

在两者中didFinishPickingMediaWithInfoimagePickerControllerDidCancel我都输入了这一行:

[imagePicker dismissModalViewControllerAnimated:YES];

我确实知道以前有人问过这个问题,但他们都没有看到对我的泄漏有任何帮助。

4

4 回答 4

1

如果它不是 ARC 环境:

您的 imagePicker = [[UIImagePickerController alloc] init]; 退货保留计数+1,

然后 [self presentModalViewController:imagePicker animated:YES] 保留你的控制器,所以保留计数+2,

[imagePicker dismissModalViewControllerAnimated:YES]; 是+1,所以你的控制器仍然挂在内存中。

之后释放您的控制器presentModalViewController

于 2012-05-25T10:46:25.780 回答
0

原来这是iOS本身代码中的一个错误。

我下载了 Apple 开发者网站的示例代码,同样的漏洞也出现了。所以这将不是我自己能解决的问题,我希望这能很快得到纠正。

于 2012-05-29T12:46:12.180 回答
0

如何创建一个@propertyforimagePicker并分配:

self.imagePicker = [[UIImagePickerController alloc] init];
于 2012-05-29T12:50:10.650 回答
0

试试这个代码

imagePicker = [[[UIImagePickerController alloc] init] autorelease];

并确定你有什么

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

// your code

[pool release];
于 2012-05-25T10:50:13.840 回答