2011-12-20 51 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