我正在使用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中崩溃。
我该如何解决?
感谢......
答案 0 :(得分:1)
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
应放在
之前return context;
答案 1 :(得分: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);
}
}