trouverez ci-dessous l'extrait de code que j'ai:NSImage et les API connexes fuite de mémoire
// Make Auto release pool
NSAutoreleasePool * autoReleasePool = [[NSAutoreleasePool alloc] init];
try
{
if (mCapture)
{
// Get the image reference
NSImage* image = NULL;
image = [mCapture getCurrentFrameImage];
// Get the TIFF data
NSData *pDataTifData = [[NSData alloc] initWithData:[image TIFFRepresentation]];
NSBitmapImageRep *pBitmapImageRep = [[NSBitmapImageRep alloc] initWithData:pDataTifData];
// Convert to BMP data
NSData *pDataBMPData;
pDataBMPData = [pBitmapImageRep representationUsingType: NSPNGFileType
properties: nil];
// Save to specified path
ASL::String strPath = ASL::MakeString(capInfo->thefile.name);
NSString* pPath = (NSString*)ASL::MakeCFString(strPath);
[pDataBMPData writeToFile:pPath
atomically: YES];
::CFRelease(pPath);
pDataBMPData = nil;
[pBitmapImageRep release];
pBitmapImageRep = nil;
[pDataTifData release];
pDataTifData = nil;
image = nil;
}
}
catch(...)
{
}
[autoReleasePool drain];
Notez que image = [mCapture getCurrentFrameImage];
est un autoreleased NSImage
retournaient. Je libère des objets et ai également NSAutoreleasePool
en place. Mais encore, il fuit environ 3-4 Mo de mémoire chaque fois que cet extrait de code est exécuté. Je ne suis pas sûr où est l'erreur.
'TIFFRepresentation' renvoie un objet NSData. Pourquoi en créez-vous un autre? De même, 'getCurrentFrameImage' ne devrait pas utiliser le mot' get', qui est pour les méthodes qui retournent quelque chose par référence; Je suggère quelque chose comme 'captureCurrentFrameImage'. –