Iphone 内存不足警告后应用程序崩溃

Iphone 内存不足警告后应用程序崩溃,iphone,Iphone,我的iphone应用程序在发出4次内存不足警告后崩溃,仪器显示没有内存泄漏,但内存分配中的活动字节数高达4.7mb,所有字节数高达79.0MB,此时应用程序崩溃 任何帮助都将不胜感激 for (int i = 0; i<3; i++) { UIImage *rendered_image; UIGraphicsBeginImageContextWithOptions(sub_view.bounds.size, NO, 0.0); [appdelegate.arr

我的iphone应用程序在发出4次内存不足警告后崩溃,仪器显示没有内存泄漏,但内存分配中的活动字节数高达4.7mb,所有字节数高达79.0MB,此时应用程序崩溃

任何帮助都将不胜感激

for (int i = 0; i<3; i++) 
{

    UIImage *rendered_image;
    UIGraphicsBeginImageContextWithOptions(sub_view.bounds.size, NO, 0.0);

    [appdelegate.arrimages removeAllObjects];
    [appdelegate.arranimations removeAllObjects];

    NSString *oldgroup = [[NSString alloc] init];
    NSString *currentgroup = [[NSString alloc] init];

    for(int i=0; i<[sub_view.data count]; i++)
    {

        oldgroup = (i>0) ? [sub_view.group objectAtIndex:(i-1)] : [sub_view.group objectAtIndex:i];
        currentgroup = [sub_view.group objectAtIndex:i];

       /*
        IF DIFFERENT GROUP NAME RECEIVED 
         1-GET NEW INSTANCE OF IMAGE 
         2-SAVE PREVIOUS IN ARRAY
       */



     if (![oldgroup isEqualToString:currentgroup]) 
         {

             rendered_image = UIGraphicsGetImageFromCurrentImageContext();

             [self SaveImagesOfAnimation:[self compressImageDownToPhoneScreenSize:rendered_image]];

             [appdelegate.arranimations addObject:[sub_view.anim objectAtIndex:i]];

             UIGraphicsEndImageContext();
             UIGraphicsBeginImageContextWithOptions(sub_view.bounds.size, NO, 0.0);

        }

        id element = [sub_view.data objectAtIndex:i];     

        color = [sub_view.fillColor objectAtIndex:i];

        [color setFill];
        [element fill];

        [[UIColor blackColor] setStroke];
        [element stroke];

    }

    rendered_image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [self SaveImagesOfAnimation:[self compressImageDownToPhoneScreenSize:rendered_image]];

}

for(int i=0;i在不泄漏的情况下增加内存使用意味着您正在存储从未发布过的数据,并且仍然保留对它的引用

这通常意味着,当您向其中添加更多数据时,其中一个数据结构(如NSMutableArray)会自动增长,这是罪魁祸首。它们会很高兴地保存您添加到其中的所有数据,并且内存探查器不会发现任何泄漏,因为根据定义,NSMutableArray中的项从未被释放,也不会被检测为泄漏e数组中有对它们的引用

编辑:如果你没有明显的地方可以看的话,要了解解决这个问题的一般方法,请参阅顶部@Costique的评论


工具还可以显示您分配的对象类型和 精确的堆栈跟踪,因此您应该能够快速计算它 出去


谢谢你的回复下面是我的代码你能指出什么是错误的吗?你需要在顶部使用Instruments作为@Costique注释来查找泄漏。在Instruments中运行它并观察一般内存使用情况。一旦你运行它一段时间并让内存积累起来,你应该能够相当容易地找出问题。谢谢我运行的回复检查仪器并检查是否存在内存泄漏,但我可以看到内存不足警告,但这些警告指出了具体位置您可能没有泄漏,但您被限制在一个循环中,自动释放池无法实际释放内存。请尝试[NSAutoReleasePool alloc]和[pool drain]关于UIGraphicsGetImageFromCurrentImageContext()/UIGraphicsSendImageContext()对。非常感谢使用NSAutoReleasePoollements解决的Fuggly问题还可以显示您分配的对象类型和确切的堆栈跟踪,因此您应该能够快速找到它。检查此链接