Reshat Belyalov
Reshat Belyalov

Reputation: 973

How to delete/destroy/make nil any object with ARC?

Every time I show some subView with this code, clearImage creates every time, and after 10 executions there are 10 images! How to delete this image after 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];
    }

Upvotes: 0

Views: 3785

Answers (3)

lnafziger
lnafziger

Reputation: 25740

UPDATE based on new code:

If hintNumber is 4, you are creating an object, never adding it to a view, and then removing it from a view that it isn't in. You need to remove the object that was added previously from it's superview, and not the one that you just created using something like [[self.view viewWithTag:99] removeFromSuperview]; and set the tag number of clearView to 99 when you create it.

As an aside, you should only create the new objects when you need them.

Upvotes: 2

davehayden
davehayden

Reputation: 3484

Call [clearImage removeFromSuperview] before setting clearImage to nil. :)

Upvotes: 0

cweinberger
cweinberger

Reputation: 3588

First: remove from superview

Second: set clearImage to nil ;)

Upvotes: 1

Related Questions