2011-12-20 47 views
1

有沒有人可以幫助我解釋更多?未知堆增長

我最小化我的代碼,使用按鈕來分配和添加UIPickerView到self.view。通過按下相同的按鈕,UIPickerView將從self.view中移除並釋放。

在每次刪除UIPickerView時,我都帶着Instrutments的HeapShot。我發現有時在堆生長中有0字節變化,4xx字節,... 2K字節和4K字節。沒有泄漏(紅色條)。

事實上,我擔心的是,當堆的使用量越來越大時。最後,我的應用程序會崩潰,現在是這種情況。當我做的拍照25倍,並提交到我的服務器,該堆增長爲1x MB(沒有用Instructments檢查無明顯漏。

任何更多的建議嗎?

這裏是我的代碼按鈕。看來,我的分配和釋放是corret

- (void) nextButtonClicked { 
    if (!pickerShown) { 
     UIPickerView *pickervTemp = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 200.0, 320.0, 216.0)]; 
     self.locationPicker = pickervTemp; 
     [pickervTemp release]; 
     [_locationPicker setDelegate:self]; 
     [_locationPicker setShowsSelectionIndicator:YES]; 
     [self.view addSubview:_locationPicker]; 
     pickerShown = YES; 
    } else { 
     pickerShown = NO; 
     [_locationPicker removeFromSuperview]; 
     [_locationPicker release]; 
     _locationPicker = nil; 
    } 

    return; 
} 

回答

0

UIPickerView有個性。就像UIWebView你不想過於頻繁,即使你扔掉之後創建的東西。它不是一個泄漏,但你的堆會上升。

您的問題的解決方案可能是隻創建一次選取器,並保留它以便重新使用時,只有在拆除父視圖控制器時纔將其丟棄。

+0

謝謝。這也是我的想法。看起來,當UI對象保持分配和釋放時,即使我看到相應的對象的dealloc被調用並執行,堆仍然會長大。 – SkyEagle888 2011-12-21 00:20:10