我正在从SDK分析这段代码,并根据我最新问题的答案出现错误:
dasblinkenlight建议我创建一个NSData对象,可以释放我的uint8_t * bytes ......
但是在这段代码中:
/**
* this will set the brush texture for this view
* by generating a default UIImage. the image is a
* 20px radius circle with a feathered edge
*/
-(void) createDefaultBrushTexture{
UIGraphicsBeginImageContext(CGSizeMake(64, 64));
CGContextRef defBrushTextureContext = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(defBrushTextureContext);
size_t num_locations = 3;
CGFloat locations[3] = { 0.0, 0.8, 1.0 };
CGFloat components[12] = { 1.0,1.0,1.0, 1.0,
1.0,1.0,1.0, 1.0,
1.0,1.0,1.0, 0.0 };
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef myGradient = CGGradientCreateWithColorComponents (myColorspace, components, locations, num_locations);
CGPoint myCentrePoint = CGPointMake(32, 32);
float myRadius = 20;
CGContextDrawRadialGradient (UIGraphicsGetCurrentContext(), myGradient, myCentrePoint,
0, myCentrePoint, myRadius,
kCGGradientDrawsAfterEndLocation);
UIGraphicsPopContext();
[self setBrushTexture:UIGraphicsGetImageFromCurrentImageContext()];
UIGraphicsEndImageContext();
}
我在这些方面遇到了同样的错误:
存储在' myColorspace'
中的对象的潜在泄漏CGGradientRef myGradient = CGGradientCreateWithColorComponents (myColorspace, components, locations, num_locations);
存储在' myGradient'
中的对象的潜在泄漏UIGraphicsPopContext();
我尝试过:
free(myColorspace);
free(myGradient);
但是我保留了同样的问题,我该怎么做才能解决它
提前感谢您的所有支持
答案 0 :(得分:14)
准确地聆听错误告诉你的内容。
“存储在myColorspace
”
让我们看看色彩空间,看看我们是否能找到问题所在。 myColorspace
已创建CGColorSpaceCreateDeviceRGB
,因此保留计数为+1,但之后从未发布。这是不平衡的,需要在最后发布。我们需要添加CGColorSpaceRelease(myColorSpace);
“存储在myGradient
”
同样的问题,使用保留计数+1创建,没有相应的释放。添加CGGradientRelease(myGradient);
不要对使用框架free
函数创建的任何内容使用Create
。内部结构可能更复杂,而且free将无法妥善处理所有内存。使用相应的Release
函数。