Quartz 2D的内存管理
l1>使用含有“Create”或“Copy”的函数创建的对象,使用完后必须释放,否则将导致内存泄露.总结:凡是遇到retain, copy, create出的对象,都是需要进行release的.
l2>使用不含有“Create”或“Copy”的函数获取的对象,则不需要释放.
l3>如有retain了一个对象,不再使用时,需要将其release掉.
l4>可以使用Quartz 2D的函数来指定retain和release一个对象.也可以使用coreFoundation的CFRetain和CFRelease.注意不能传递NULL值给这些函数.
l5>演示通过CGMutablePathRef实现绘图.通过Product -> Analyze来进行静态分析.注意: CGPathCreatMutable()不是OC方法,所以不是调用某个对象的release方法.
//代码实现
------------------------------ HMRootView.m------------------------------
- (void)drawRect:(CGRect)rect
{
// 1.获取当前绘图上下文
CGContextRefctx =UIGraphicsGetCurrentContext();
// 2.创建画线的path对象
CGMutablePathReflinePath =CGPathCreateMutable();
// 2.1拼接路径
CGPathMoveToPoint(linePath,NULL,50,50);
CGPathAddLineToPoint(linePath,NULL,150,150);
CGPathAddLineToPoint(linePath,NULL,100,50);
// 2.2把路径添加到上下文对象中
CGContextAddPath(ctx, linePath);
// 3.创建一个画圆的路径
CGMutablePathRefcirclePath =CGPathCreateMutable();
// 3.1添加路径
CGPathAddArc(circlePath,NULL,150,150,50,0,M_PI*2,0);
// 3.2把路径添加到上下文中
CGContextAddPath(ctx, circlePath);
// 4.渲染上下文
CGContextStrokePath(ctx);
//CGPathRelease(circlePath);
//CGPathRelease(linePath);
//只要是Core Foundation中的对象,都可以直接通过下面的代码来释放。
CFRelease(linePath);
CFRelease(circlePath);
}