Как остановить Nsimage lockfocus от утечки памяти в NSOperation?
У меня есть проблема с утечкой памяти NSImages, когда я обращаюсь к ним с lock/unlockfocus. Утечка уходит, когда я комментирую утечки здесь код ниже. Так что я знаю, что именно там происходит утечка.
for(int i= 0; i < nNumberImages; ++i)
{
m_apNSImageArray[i]= [[NSImage alloc] initWithSize:m_viewRect.size];
if(!m_apNSImageArray[i])
{
return;
}
//LEAKS IN THIS CODE HERE
[m_apNSImageArray[i] lockFocus];
//EDIT: Commented the lines below out, but leak persists.
//[[[[NSApp delegate] getColors] getAudioWaveColor:YES] setStroke];
//[[m_pmaBezierPaths objectAtIndex:i] stroke];
[m_apNSImageArray[i] unlockFocus];
//TO HERE
}
Я использую сборку мусора, и этот цикл for является частью NSOperation, запущенной в NSOperationQueue в OSX 10.7 Lion.
Это ошибка с блокировкой NSImage на фоновых потоках / операциях?
Править: Похоже, что lockFocus выделяет новые пространство каждый раз ее называло.
3 ответа:
Ну, я все еще не совсем уверен, как полностью остановить утечку, но я резко сократил количество раз, когда я lockFocus/unlockFocus. Это, по сути, решило мою проблему.
У меня почти идентичная проблема и нужно добавить autorelease пул.
Не-Дуга:
// set up the autorelease pool NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // do image stuff NSImage *imagemage = [[NSImage alloc] init]; [maskedImage lockFocus]; [maskedImage unlockFocus]; [image release]; // drain the autorelease pool [pool drain];
Дуга:
@autoreleasepool { NSImage *imagemage = [[NSImage alloc] init]; [maskedImage lockFocus]; [maskedImage unlockFocus]; }