UIImagePicker 选择后崩溃

Posted

技术标签:

【中文标题】UIImagePicker 选择后崩溃【英文标题】:UIImagePicker crashing after selection 【发布时间】:2011-12-22 21:39:39 【问题描述】:

我正在使用ELCImagePickerController,所以我可以选择多张照片并导入它们。当我选择几张照片时效果很好,但如果我选择超过 25 张左右,我就会崩溃。这是我点击完成选择照片后运行的代码:

-(void)selectedAssets:(NSArray*)_assets 
    NSMutableArray *returnArray = [[NSMutableArray alloc] init];
    int count=0;
    for(ALAsset *asset in _assets) 
        NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init];
        [workingDictionary setObject:[asset valueForProperty:ALAssetPropertyType] forKey:@"UIImagePickerControllerMediaType"];

        UIImage *image=[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
        [workingDictionary setObject:image forKey:@"UIImagePickerControllerOriginalImage"];
        [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"];

        NSLog(@"%i", count);
        count++;

        [returnArray addObject:workingDictionary];
    
    [self popToRootViewControllerAnimated:NO];
    [[self parentViewController] dismissModalViewControllerAnimated:YES];

    if([delegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) 
        [delegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:[NSArray arrayWithArray:returnArray]];
    

我选择了 80 张照片,NSLog 语句最多显示 45 张,但随后它就崩溃了,没有任何消息,只是 (gdb)

我选择的图像是使用后置摄像头拍摄的 iPhone 4 图像。我也尝试在导入时调整图像大小,但即便如此,应用程序仍然崩溃。关于可能是什么问题的任何想法?

【问题讨论】:

您可能使用了过多的 RAM。您是否使用 Activity Monitor 工具分析了这部分代码? 我现在在 Instruments 中使用了泄漏模板,总分配量从未超过 3.76 MB。还是应该使用不同的模板? 很难相信在选择了 80 张图像并将它们加载到 RAM 中后,它的使用量大约为 4mb。尝试使用 Activity Monitor 工具,它会显示真实的内存使用统计信息。 好的,我使用了活动监视器。如果我使用正确,那么在导入后,Real Mem 会为我的应用程序增加超过 100 MB。我猜这不太好。我该怎么办? 【参考方案1】:

如果您不介意,我将把它作为答案。

这个问题的解决方案很少。首先,您可能希望限制用户选择超过 5 张照片之类的内容。其次,您可能希望调整图像大小并使其非常小,然后再将它们放入数组或其他东西中。或者,如果您需要它们全部为原始大小,则可以在选择时将它们复制到 ~/tmp 目录,并将它们的链接存储在 NSArray 中,这样您就可以从磁盘动态加载它们,而不是将它们全部保存在内存中.

很抱歉,如果它没有帮助,因为我真的不知道您同时使用这么多图像的最终目标。

【讨论】:

以上是关于UIImagePicker 选择后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何将UIImagePicker图像转换为字节数组objective-c

SWIFT - UIimagepicker 将图像分配到数组中

使用 UIImagePicker 一次后的内存警告

内存警告后释放 UIImage 时崩溃

应用启动时加载用户配置文件,选择视图时崩溃,将 PFFile 转换为 UIImage

从uiimagepicker捕获图像后如何自定义图像