2009-09-15 6 views
0

Хорошо, у меня есть мир трудности, отслеживающий эту утечку памяти. При запуске этого сценария я не вижу утечки памяти, но мой объектalloc поднимается. Инструменты указывают на CGBitmapContextCreateImage> create_bitmap_data_provider> malloc, это занимает 60% моего объекта allococ.iPhone - UIImage Leak, ObjectAlloc Building

Этот код вызывается несколько раз с помощью NSTimer.

Как очистить этот reUIImage после его возвращения?

... или Как я могу сделать так, чтобы UIImage imageWithCGImage не создавал мой ObjectAlloc?

//I shorten the code because no one responded to another post 
    //Think my ObjectAlloc is building up on that retUIImage that I am returning 
    //**How do I clear that reUIImage after the return?** 

-(UIImage) functionname { 
    //blah blah blah code 
    //blah blah more code 

    UIImage *retUIImage = [UIImage imageWithCGImage:cgImage]; 
      CGImageRelease(cgImage); 

      return retUIImage; 
    } 

ответ

1

этот метод используется инстанцирует UIImage и устанавливает его в качестве autorelease. Если вы хотите очистки этих, вам нужно будет опустошить у бассейна периодически

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
.. 
.. 
.. 
[pool release]; 

Обратите внимание, что они могут быть вложенными:

NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init]; 
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init]; 
.. 
.. 
.. 
[pool2 release]; 
[pool1 release]; 

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

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
for (Thing *t in things) { 
    [thing doAMethodThatAutoreleasesABunchOfStuff]; 
} 
[pool release] 
+0

Я видел, как NSAutoreleasePool выпускается следующим образом ... [pool drain], какой путь правильный? [пул утечки] или [пул релиз]? – bbullis21

+0

Из документов: В среде с подсчетом ссылок этот метод ведет себя так же, как и выпуск. Поскольку пул авторесурсов не может быть сохранен (см. Сохранение), это приводит к тому, что приемник будет освобожден. Когда пул авторесурсов освобождается, он отправляет сообщение о выпуске всем своим автореализованным объектам. Если объект добавляется несколько раз в тот же пул, когда пул освобождается, он получает сообщение о выпуске для каждого момента его добавления. Телефон не имеет сбора мусора – coneybeare

+0

Непонятно из комментария, но это описание из метода стока – coneybeare