XCode の 5.0.1 メモリ モニターによると、レベル ローディング ルーティングで次のコード ブロックを呼び出すたびにメモリ リークが発生する理由を理解しようとしています。このコード ブロックは、アルファ チャネルに従って画像の実際の境界をチェックするためのものです。
UIImageView* iv = (UIImageView*)m_image->GetId();
// First get the image into your data buffer
CGImageRef image = [iv.image CGImage];
int width = CGImageGetWidth(image);
int height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void* rawData = malloc(height * width * 4);
int bytesPerPixel = 4;
int bytesPerRow = bytesPerPixel * width;
int bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
CGContextRelease(context);
// rawData contains the image data in the RGBA8888 pixel format.
int lx=99999999,bx=0,ly=99999999,by=0;
for( int x=0; x<width; x++ )
{
for( int y=0; y<height; y++ )
{
int pixelInfo = (bytesPerRow * y) + x * bytesPerPixel; // data is a png
unsigned char* d = (unsigned char*)rawData;
if( d[pixelInfo + 3] ) // check alpha
{
if( x < lx ) lx = x;
if( x > bx ) bx = x;
if( y < ly ) ly = y;
if( y > by ) by = y;
}
}
}
free(rawData);
この問題へのより良いアプローチがある場合は、アドバイスしてください。ただし、この実装は、リークするという事実からうまく機能します。
ありがとう。