繁体   English   中英

提供潜在的内存泄漏警告和应用程序崩溃

[英]Giving Potential Memory Leak warning and app crashes

我正在使用ScreenCaptureView.进行视频录制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中崩溃。

我该如何解决?

谢谢......

CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

应该放在之前

return context;

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

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM