У меня есть метод для рисования объекта на экране с помощью кварца. Последние строки этого метода являются:IPHONE: память по-прежнему выделяется после отпускания объекта?
CGRect LayerRect = CGRectMake(mX,mY, wLayer, hLayer);
CGContextDrawImage(objectContext, LayerRect, objectProxy.image.CGImage); // 1
CGRect superRect = CGRectMake(vX, vY, w,h);
CGContextDrawLayerInRect(context, superRect, objectLayer);
CGLayerRelease(objectLayer); // 2
UIImage * myImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); //3
return myImage;
, как Вы видите слой, нарисованные на // 1 выпущен на // 2, и контекст выпущен // 3.
Итак, утечки нет?
На самом деле, приборы сообщают об этом как о НЕ УТЕЧКЕ, но после запуска этого метода и возврата в основной цикл мое приложение использует 1.38 МБ памяти больше, чем раньше.
Исследуя на intruments, на вкладке выделения памяти, я вижу запись как
Malloc 1.38 MB
overall bytes = 1.38 MB
#Overall = 1
#alloc =
Live Bytes = 1.38 MB
#Living = 1
#Transitory = 0
и это точки входа в этот
CGContextDrawImage(objectContext, LayerRect, objectProxy.image.CGImage); // 1
Так, по-видимому, память, выделенная внутри метода еще выделяется но не утечка ?? Как это может быть?
Как я могу избавиться от этого распределения памяти, освобождая память?
благодарит заранее!
СПАСИБО! но я пробовал это, и выделенная область все еще там! – SpaceDog
, дополняющий мой последний комментарий ... Я подтвердил, что возвращенное изображение не отвечает за выделенную память. Я прокомментировал строку выше // 3 и заменил последний на return nil; и инструменты по-прежнему показывают 1,38 МБ как выделенные для CGContextDrawImage (// 1) ... потрясающие. Как-то CGContextDrawImage не освобождает выделенную область после создания изображения. – SpaceDog
Да, это сумасшествие ... все, что вы можете сделать, это написать и проверить свой код и сделать все возможное, а потом надеяться, что люди в Apple также знают, что они делают. – Nicholaz