Цель C проблема утечки памяти - PullRequest
0 голосов
/ 01 декабря 2010

У меня проблема утечки памяти в следующем коде цели c. Строка , выделенная жирным шрифтом , отмеченная звездочкой (***), является строкой с утечкой памяти (упомянутой в приборе). Есть идеи? Спасибо.

- (UIImage*)part:(float)part ofImage:(UIImage*)imgObject withMask:(UIImage*)imgMask {
 UIImage *imgResult = nil;
 CGRect rcMask = CGRectMake(0.0f, 0.0f, imgMask.size.width, imgMask.size.height);
 CGRect rcObject = CGRectMake(0.5f * (rcMask.size.width - imgObject.size.width), 0.0f, imgObject.size.width, imgObject.size.height * part);

 BytePtr pictureData = (BytePtr)malloc(rcMask.size.width * rcMask.size.height * 4);
 CGContextRef pictureContext = CGBitmapContextCreate(pictureData, rcMask.size.width,              rcMask.size.height,8, rcMask.size.width * 4,CGImageGetColorSpace(imgObject.CGImage),              kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

 CGContextClipToMask(pictureContext, rcMask, imgMask.CGImage);
 CGImageRef imgInRect;
 imgInRect = CGImageCreateWithImageInRect(imgObject.CGImage, rcObject);
 CGContextDrawImage(pictureContext, rcObject, imgInRect);
 CGImageRelease(imgInRect);
 ***imgResult = [UIImage imageWithCGImage:CGBitmapContextCreateImage(pictureContext)];***

 CGContextRelease(pictureContext);
 free(pictureData);
 return imgResult;
}

1 Ответ

5 голосов
/ 01 декабря 2010
imgResult = [UIImage imageWithCGImage:CGBitmapContextCreateImage(pictureContext)];

Вы создаете CGImage, передаете его фабричному методу UIImage, а затем забываете об этом. Вы пропускаете CGImage.

Сделайте это вместо:

CGImageRef cgResult = CGBitmapContextCreateImage(pictureContext);
if (cgResult) {
    imgResult = [UIImage imageWithCGImage: cgResult];
    CGImageRelease(cgResult);
}
...