gpt4 book ai didi

ios - 选择照片后 UIPickerController 内存泄漏

转载 作者:行者123 更新时间:2023-11-29 00:03:23 25 4
gpt4 key购买 nike

每当我在我的图像选择器 Controller 中选择一张照片时,我就会发生内存泄漏。我已经尝试自己研究为什么会发生这种情况,但我没有发现任何与我的情况相近的东西。我从中学到的各种教程在使用图像选择器 Controller 时也存在内存泄漏。我所做的只是选择一张照片,然后图像选择器 Controller 关闭。我已经尝试了很多天的解决方案,但没有运气,我倾向于在寻求帮助之前尝试找到解决方案,非常感谢任何帮助,这是我的代码。

@property (nonatomic, strong) UIImagePickerController *imagePicker;
@property (nonatomic, strong) UIImage *image;

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];


[self.tableView reloadData];
if (self.image == nil && [self.videoFilePath length] == 0) {
self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.delegate = self;
self.imagePicker.allowsEditing = NO;
self.imagePicker.videoMaximumDuration = 10;

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
else {
self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
self.imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:self.imagePicker.sourceType];

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

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];



UIImage *newImage = [self resizeImage:self.image toWidth:200 andHeight:200];

self.image = newImage;


if (self.imagePicker.sourceType == UIImagePickerControllerSourceTypeCamera) {

UIImageWriteToSavedPhotosAlbum(self.image, nil, nil, nil);
}
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {
// A video was taken/selected!

NSURL *videoUrl = info[UIImagePickerControllerMediaURL];
self.movieUrl = videoUrl;

self.videoFilePath = videoUrl.absoluteString;

if (self.imagePicker.sourceType == UIImagePickerControllerSourceTypeCamera) {
// Save the video!

if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(self.videoFilePath)) {
UISaveVideoAtPathToSavedPhotosAlbum(self.videoFilePath, nil, nil, nil);
}
}
}

[self dismissViewControllerAnimated:YES completion:nil];

当我使用我得到的工具时,负责的实例在 Core Foundation 中。 CF字符串。我不太熟悉在 Objective-C 中调试像这样的内存泄漏。我会很感激这里的手!谢谢。

最佳答案

泄漏来自 Apple 的代码。您做错的唯一一件事是保留 UIImagePickerController 作为实例属性。别那样做;每次呈现 UIImagePickerController 时将其创建为临时局部变量。除此之外,您无能为力。

关于ios - 选择照片后 UIPickerController 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48770185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com