1

我正在使用视频录制ScreenCaptureView.

我使用了以下代码;

 -(CGContextRef) createBitmapContextOfSize:(CGSize) size

    {    CGContextRef    context = NULL;     CGColorSpaceRef colorSpace;     int             bitmapByteCount;

        int bitmapBytesPerRow;

        bitmapBytesPerRow   = (size.width * 4);      
        bitmapByteCount     = (bitmapBytesPerRow * size.height); 
        colorSpace = CGColorSpaceCreateDeviceRGB();
         if (bitmapData != NULL)
         {       
            free(bitmapData);   
         }

         bitmapData = malloc( bitmapByteCount );
          if (bitmapData == NULL)
         {      
               fprintf (stderr, "Memory not allocated!");   
               return context=NULL;      
         }    

    context = CGBitmapContextCreate (bitmapData, size.width, size.height, 8, bitmapBytesPerRow,colorSpace, kCGImageAlphaNoneSkipFirst);

    CGContextSetAllowsAntialiasing(context,NO);
        if (context== NULL)
         {
        free (bitmapData);
        fprintf (stderr, "Context not created!");
        return NULL;
    }

    return context;

    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
}

但它给了我潜在的内存泄漏警告和应用程序崩溃。

它在 ipod 中运行良好,但在 ipad 中崩溃。

我该如何解决?

谢谢......

4

2 回答 2

1
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

应该放在前面

return context;
于 2013-03-26T09:05:42.280 回答
0

CGContextRef 内部包含一些内存分配。所以只需像这样使用@autoreleasepool 尝试一次。

         -(CGContextRef) createBitmapContextOfSize:(CGSize) size

            {   
  @autoreleasepool
   {

             CGContextRef    context = NULL;     
               CGColorSpaceRef colorSpace;     
                  int bitmapByteCount;

                int bitmapBytesPerRow;

                bitmapBytesPerRow   = (size.width * 4);      
                bitmapByteCount     = (bitmapBytesPerRow * size.height); 
                colorSpace = CGColorSpaceCreateDeviceRGB();
                 if (bitmapData != NULL)
                 {       
                    free(bitmapData);   
                 }

                 bitmapData = malloc( bitmapByteCount );
                  if (bitmapData == NULL)
                 {      
                       fprintf (stderr, "Memory not allocated!");   
                       return context=NULL;      
                 }    

            context = CGBitmapContextCreate (bitmapData, size.width, size.height, 8, bitmapBytesPerRow,colorSpace, kCGImageAlphaNoneSkipFirst);

            CGContextSetAllowsAntialiasing(context,NO);
                if (context== NULL)
                 {
                free (bitmapData);
                fprintf (stderr, "Context not created!");
                return NULL;
            }
            return context;

            CGContextRelease(context);
            CGColorSpaceRelease(colorSpace);
  }

        }
于 2013-03-26T09:14:54.603 回答