2011-03-20 91 views
0

這是我的代碼,應用程序運行時將其更改爲其內部的視圖。當你改變這種看法不止一次(所以不是你第一次運行它)這是造成與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++; 
} 

}

+1

注意:你不應該釋放'colourButton'。你可以使用'for'而不是'while'。 – benwong 2011-03-20 21:48:02

回答

0

你在哪裏發佈colourButtonsArray

如果你打電話超過一次,你將創建爲colorButtonsArray一個新的陣列,每一次漏水舊setColours多個(假設你只在你的dealloc方法釋放colourButtonsArray,或者如果你不釋放它在所有) 。

+0

如果我把[colourButtonsArray release];在dealloc中,然後當我第二次加載視圖時,它崩潰。 – Andrew 2011-03-20 21:32:00

+0

...泄漏不會立即導致崩潰。你確定你不是在這裏混淆術語嗎?泄漏是當你不釋放你的對象時,它仍然卡在佔用空間的內存中。如果反覆泄漏內存,最終會導致崩潰(通過內存不足錯誤),但是不會像這樣的單個陣列。聽起來像其他事情正在發生。 – lxt 2011-03-20 21:35:36

0

正確使用訪問器,並根據需要進行鎖定。這可能有所幫助:

-(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

你能解釋'lock'是什麼意思嗎?我不明白。 – Andrew 2011-03-20 21:46:22

+0

@Andrew WIYF:'http://en.wikipedia.org/wiki/Lock_(computer_science)' – justin 2011-03-20 22:09:23