сбой приложения после предупреждения о нехватке памяти - PullRequest
0 голосов
/ 14 января 2012

сбой моего приложения на iphone после выдачи 4 предупреждений о нехватке памяти, приборы не показывают утечек памяти, но при выделении памяти объем активных байтов увеличивается до 4,7 МБ, а по всем байтам - до 79,0 МБ, и в этот момент происходит сбой приложения

любая помощь будет высоко ценится

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]];

}

1 Ответ

0 голосов
/ 14 января 2012

Увеличение использования памяти без утечки означает, что вы храните данные, которые вы никогда не публикуете, и вы все еще храните ссылку на них .

Обычно это означает, что виновата одна из структур данных, которая будет автоматически расти, когда вы добавляете в нее больше данных, например NSMutableArray. Они с радостью будут хранить все данные, которые вы добавляете к ним, и профилировщик памяти не обнаружит утечек, поскольку элементы, помещенные в NSMutableArray, - по определению - никогда не освобождаются и не обнаруживаются как утечки, поскольку существует ссылка на них из массива.

Редактировать: Общий способ решения этой проблемы, если у вас нет очевидных мест, смотрите комментарий @Costique вверху;

Инструменты могут также отображать вид объектов, которые вы выделили, и точные следы стека, так что вы должны быть в состоянии быстро выяснить это вне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...