Утечка памяти из этого кода, как мне от нее избавиться? - PullRequest
0 голосов
/ 21 марта 2011

Это мой код, который приложение запускает после изменения представления, внутри которого оно находится.Это вызывает утечку памяти с помощью colourButtonsArray, когда вы переходите в это представление более одного раза (поэтому не в первый раз, когда вы запускаете его), но я не уверен, как от него избавиться:

-(void)setColours {

        colourButtonsArray = [[NSMutableArray alloc] init];
        [colourButtonsArray addObject:@""];


    int buttonsI = 1;

    while (buttonsI < 7)
    {
        //Make a button
        UIButton *colourButton = [UIButton buttonWithType:UIButtonTypeCustom];
        colourButton.frame = CGRectMake((53*(buttonsI-1))+3, 5, 49, 49);
        colourButton.tag = buttonsI;
        [colourButton addTarget:self action:@selector(colourButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [colourView addSubview:colourButton];


        [colourButtonsArray addObject:colourButton];


[colourButton release];
    buttonsI++;
}

}

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

используйте аксессоры правильно и заблокируйте при необходимости. это может помочь:

-(void)setColours {
/* lock if necessary */
    self.colourButtonsArray = [NSMutableArray array];
    [self.colourButtonsArray addObject:@""];

    int buttonsI = 1;

    while (buttonsI < 7)
    {
    /* Make a button */
        UIButton *colourButton = [UIButton buttonWithType:UIButtonTypeCustom];
        colourButton.frame = CGRectMake((53*(buttonsI-1))+3, 5, 49, 49);
        colourButton.tag = buttonsI;
        [colourButton addTarget:self action:@selector(colourButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
        [self.colourView addSubview:colourButton];

        [self.colourButtonsArray addObject:colourButton];

        // no release here: [colourButton release];
        buttonsI++;
    }

/* unlock if necessary */
}
0 голосов
/ 21 марта 2011

Где вы выпускаете colourButtonsArray?

Если вы вызовете setColours более одного раза, вы создадите новый массив для colorButtonsArray и будете каждый раз пропускать старый (при условии, что вы используете только colourButtonsArray в вашем методе dealloc, или если вы этого не сделаете отпусти его вообще).

...