[英]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.