0

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);

この問題へのより良いアプローチがある場合は、アドバイスしてください。ただし、この実装は、リークするという事実からうまく機能します。

ありがとう。

4

0 に答える 0