如何使用ARC删除/销毁/生成任何对象?

时间:2012-03-19 16:53:34

标签: ios object

每当我使用此代码显示一些subView时,每次都会创建clearImage,并且在10次执行后会有10个图像! 如何在 removeFromSuperview 之后删除此图片?

- (IBAction)nextTutorial:(id)sender {
    UIImageView *clearImage = [[UIImageView alloc] initWithFrame:CGRectMake(270, 0, 50, 50)];
    clearImage.image = [UIImage imageNamed:[settings objectAtIndex:7]];

    UIImageView *helpImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    helpImage.image = [UIImage imageNamed:[settings objectAtIndex:8]];

    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(60, 7, 200, 30)];
    slider.value = 0.5;

    if (hintnumber == 1) {
        self.hintLabel.text = [settings objectAtIndex:1];
        [self.view addSubview:slider];
        hintnumber = 2;
    } else if (hintnumber == 2) {
        self.hintLabel.text = [settings objectAtIndex:2];
        [self.view addSubview:clearImage];
        hintnumber = 3;
    } else if (hintnumber == 3) {
        self.hintLabel.text = [settings objectAtIndex:3];
        [self.view addSubview:helpImage];
        [self.nextButton setTitle:[settings objectAtIndex:5] forState:UIControlStateNormal];
        hintnumber = 4;
    } else if (hintnumber == 4) {
        hintnumber = 1;
        [slider removeFromSuperview];
        [clearImage removeFromSuperview];
        [helpImage removeFromSuperview];
        slider = nil;
        clearImage = nil;
        helpImage = nil;

        [self.view removeFromSuperview];
    }

3 个答案:

答案 0 :(得分:2)

根据新代码进行更新:

如果hintNumber为4,则表示您正在创建一个对象,从不将其添加到视图中,然后将其从不存在的视图中删除。您需要从其超级视图中删除先前添加的对象,并且不是您刚刚使用类似[[self.view viewWithTag:99] removeFromSuperview];创建的那个,并在创建时将clearView的标记号设置为99.

另外,您应该只在需要时创建新对象。

答案 1 :(得分:1)

首先:从superview中删除

第二:将clearImage设置为nil;)

答案 2 :(得分:0)

在将clearImage设置为nil之前调用[clearImage removeFromSuperview]。 :)