拍照内存警告导致崩溃的解决

  #import <MobileCoreServices/UTCoreTypes.h>

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    UIImage *originalImage, /*editedImage,*/ *imageToSave;
    SQImagePickerController *sqImgPicker = (SQImagePickerController *)picker;
    // 处理静态照片
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {
//        editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage];
        originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
//        if (editedImage) {
//            imageToSave = editedImage;
//        }
//        else {
            imageToSave = originalImage;
//        }
        // 将静态照片(原始的或者被编辑过的)保存到相册(Camera Roll)
        //  UIImageWriteToSavedPhotosAlbum (imageToSave, nil, nil , nil);
        // 根据图片控件的尺寸缩放照片(只是为了显示效果。实际传输时依然使用原始照片)
        // UIImage* scaledImage = [self imageWithImage:imageToSave scaledToSize:self.imagePhoto.bounds.size];
        //对图片大小进行压缩--
        imageToSave = [self imageWithImage:imageToSave scaledToSize:CGSizeMake(158, 100)];
        if (_flagType==1) {
            NSDictionary *data = @{@"paizhaoImage" : imageToSave};
            [SQBaseCell sharedInstance].paizhaoImageData = data;
            // 缓存传输照片
            self.imagePicture = imageToSave;
            [self.allSqInfoView[self.selectedIndex] didrecordValidate:self.tempPaiButton conValue:@"YES" showText:@""];
            for (int i=(int)self.imageDicArray.count-1; i>=0; i--) {
                if ([[self.imageDicArray[i] objectForKey:@"key"] isEqualToString:self.imgButton.accessibilityHint]) {
                    [self.imageDicArray removeObject:self.imageDicArray[i]];
                }
            }
            NSDictionary *tempDic = [NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSString stringWithFormat:@"%@", self.imgButton.accessibilityHint],@"key",
                                     imageToSave,@"imageData",
                                     sqImgPicker.fileType, @"fileType",
                                     nil];

            [self.imageDicArray addObject:tempDic];
        }
        else if(_flagType==2)
        {
            NSDictionary *data = @{@"imgData" : imageToSave};
            SQInfoView *sqInfoView=self.allSqInfoView[self.selectedIndex];
            [sqInfoView insertSubView:[UIButton new] clickView:self.imgButton data:data];
        }

    }

    [self dismissViewControllerAnimated:YES completion:Nil];
}
//对图片尺寸进行压缩--
-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
    // Create a graphics image context
    UIGraphicsBeginImageContext(newSize);

    // Tell the old image to draw in this new context, with the desired
    // new size
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

    // Get the new image from the context
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

    // End the context
    UIGraphicsEndImageContext();

    // Return the new image.
    return newImage;
}
时间: 2024-10-17 12:56:18

拍照内存警告导致崩溃的解决的相关文章

解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题

解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 iOS开发 · 2015-01-22 11:31 MWPhotoBrowser是一个非常不错的照片浏览器,在github的star接近3000个,地址:https://github.com/mwaterfall/MWPhotoBrowser.git MWPhotoBrowser来加载小图1M以下的都应该不会有内存警告的问题.如果遇到大图,3M.4M.5M的大图,很有可能导致内存警告.最近我就遇到这个问题,很是头疼

记因PHP的内存溢出导致的事故之解决

如果对您有用记得关注,更多干货. 今天上午刚到公司,就有同事在公司群里反映某个计划任务出现问题了.我就怀着刨根问底的心,去查看了log.发现挺有意思的一个问题,PHP内存溢出导致脚本执行失败.那就一起来看个究竟吧! 首先查看了计划任务的Log 从报错信息字面意思可以看出,允许的134217728 bytes的内存已经用尽,还要试图分配12961640 bytes内存. 给你(当前脚本)分配的内存你已经用完了,你还想问系统要内存.系统这时想对你说: 地主家也没有余粮啊(借用葛优大爷的一句话) 模拟

C语言内存使用的常见问题及解决之道

一  前言 本文所讨论的“内存”主要指(静态)数据区.堆区和栈区空间(详细的布局和描述参考<Linux虚拟地址空间布局>一文).数据区内存在程序编译时分配,该内存的生存期为程序的整个运行期间,如全局变量和static关键字所声明的静态变量.函数执行时在栈上开辟局部自动变量的储存空间,执行结束时自动释放栈区内存.堆区内存亦称动态内存,由程序在运行时调用malloc/calloc/realloc等库函数申请,并由使用者显式地调用free库函数释放.堆内存比栈内存分配容量更大,生存期由使用者决定,故

IOS开发中 常常遇到的遇到的警告,错误汇总,解决方法

从sdk3.2.5升级到sdk 5.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了. 1,警告:"xoxoxoxo"  is deprecated 解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可. 2,警告:Declaration of "struct sockaddr" will not be visible outside of this function 解决办法:在你的开源.m文件中添加 #import <netinet/in.

Java内存泄露的理解与解决

Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露.Java语言对内存管理做了自己的优化,这就是垃圾回收机制.Java的几乎所有内存对象都是在堆内存上分配(基本数据类型除外),然后由GC(garbage collection)负责自动回收不再使用的内存. 上面是Java内存管理机制的基本情况.但是如果仅仅理解到这里,我们

Java 内存泄露的理解与解决过程

本文详细地介绍了Java内存管理的原理,以及内存泄露产生的原因,同时提供了一些列解决Java内存泄露的方案,希望对各位Java开发者有所帮助. Java内存管理机制 在C++ 语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露. Java 语言对内存管理做了自己的优化,这就是垃圾回收机制. Java 的几乎所有内存对象都是在堆内存上分配(基本数据类型

ios6 处理内存警告

iPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息.收到此消息后,app必须正确处理,否则可能出错或者出现内存泄露. app收到Memory Warning后会调用:UIApplication::didReceiveMemoryWarning -> UIApplicationDelegate::applicationDidReceiveMemoryWarning,然后调用当前所有的viewController进

无响应脚本警告 - 含义和如何解决

无响应脚本警告 - 含义和如何解决 Firefox 可能会弹出这样的提示:“警告:不响应的脚本”,并伴随着以下内容——“当前页面的某个脚本正忙,或者已停止响应.您可以立即停止该脚本,或者您可以继续以等待该脚本结束.”本文介绍了出现此提示的原因,以及可能的解决方案和折衷的办法. 这个错误提示意思是 Firefox 认为有脚本在运行中失去了控制,如果不处理会导致 Firefox 挂起.出问题的脚本可能是您当前访问的页面中的,也可能是您安装的扩展里的,甚至是 Firefox 本身的. 目录 Webro

内存泄漏以及常见的解决方法

  之所以撰写这篇文章是由于前段时间花费了非常大的精力在已经成熟的代码上再去处理memory leak问题.写此的目的是希望我们应该养成良好的编码习惯,尽可能的避免这种问题,由于当你对着一大片的代码再去处理此类的问题,此时无疑添加了解决的成本和难度.准确的说属于补救措施了. 1. 什么是内存泄漏(memory leak)?  指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内