这会导致被遗弃的记忆吗?

时间:2012-07-13 14:11:02

标签: ios ios5 memory-management abandoned-memory

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

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

}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

事实上,你正在用这条线“取得所有权”:

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

如果您没有使用自动引用计数(ARC),则应在方法结束前自动释放bezierImageView。