0

我正在查看内存中的堆镜头。这个功能似乎是遗弃记忆的罪魁祸首。

这是我的一个视图“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];

}
4

2 回答 2

1

bezierImageview 应该在添加到子视图之前自动释放,或者在添加到子视图后释放。使用您当前的代码,该对象的保留计数永远不会低于 1。

这是假设非 ARC,但如果您使用 ARC,它就不会泄漏。

于 2012-07-13T14:27:17.730 回答
0

You are, in fact, "taking ownership" of something with this line:

UIImageView *bezierImageView=[[UIImageView alloc]initWithImage:bezierimage];

If you're not using Automatic Reference Counting (ARC), you should autorelease bezierImageView before the end of the method.

于 2012-07-13T14:29:43.367 回答