我在看内存中的堆镜头。这个功能似乎是废弃记忆的罪魁祸首。
它是构建我的一个视图“MyView”的视图的一部分。
如果我使用此函数创建并销毁'MyView'100次,则注释内存大小始终返回到它的基线。但是如果我把这个功能留在我的记忆中不断增加。
据我所知,我不接受函数中的所有内容。 我做错了什么?
-(void)drawPointAroundCircle:(CGPoint)centerpoint radius:(int)radius amount:(int)amount
{
CGPoint pointarray[amount];
float thetaarray[7]={270.0,315.0,0.0,45.0,135,180.0,225.0};
int i=-1;
UIGraphicsBeginImageContext(CGSizeMake(self.frame.size.width,self.frame.size.height));
CGContextRef context=UIGraphicsGetCurrentContext();
for (i=0; i<7; i++) {
float x=cosf(D2R( thetaarray[i]))*radius;
float y =sinf( D2R(thetaarray[i]))*radius;
x=x+centerpoint.x;
y=y+centerpoint.y;
pointarray[i].x=x;
pointarray[i].y=y;
UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(x, y) radius:2 startAngle:D2R(0) endAngle:D2R(360) clockwise:YES];
CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
[path fill];
[path closePath];
}
UIImage *bezierimage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *bezierImageView=[[UIImageView alloc]initWithImage:bezierimage];
[self addSubview:bezierImageView];
}
答案 0 :(得分:1)
bezierImageview应该在将其添加到子视图之前自动释放,或者在将其添加到子视图后释放。使用当前代码,该对象的保留计数永远不会低于1。
这假设是非ARC,但如果您使用ARC则不会泄漏。
答案 1 :(得分:0)
事实上,你正在用这条线“取得所有权”:
UIImageView *bezierImageView=[[UIImageView alloc]initWithImage:bezierimage];
如果您没有使用自动引用计数(ARC),则应在方法结束前自动释放bezierImageView。