2014-03-26 42 views
1

我正在使用MBProgressHUB作为加载指示器。我注意到,通过仪器,有相当大的内存泄漏时使用MBProgressHUB约3MB每次启动。问题是,内存不清除时,视图卸载使用MBProgressHUD时的内存泄漏

项目是ARC启用

这是怎么了在ViewDidLoad启动MBProgressHUB(HUD被保留的财产太)

HUD = [[MBProgressHUD alloc] initWithView:[(AppDelegate *)[[UIApplication sharedApplication]  delegate] window]]; 
[[(AppDelegate *)[[UIApplication sharedApplication] delegate] window] addSubview:HUD]; 
HUD.delegate = self; 

另外在ViewDidUnload我设置HUD = nil;

任何想法?

+2

仪器还显示,其中分配是......让最起码的例子程序,你可以仍然显示了泄漏,你就会有更少的噪音通过搜索。 – mah

回答

1

我设法通过在AppDelegate中初始化MBProgressHUB一次来解决问题。并只使用在其他地方的参考

4

您正在将子窗口添加到子窗口中。 Window始终在您的应用运行时将其保留在子视图中。

当你不需要它或者将属性HUD.removeFromSuperViewOnHide设置为YES时,你应该调用[HUD removeFromSuperview]方法 - 如果你没有在其他地方保留它,它将在隐藏和释放内存时删除它自己。

如果您将其添加到控制器的视图 - 它将在其视图的控制器生命周期结束时解除分配。

+0

HUD.removeFromSuperViewOnHide = YES正是我错过的!谢谢SerJ_G! –

0

我做这与非ARC项目。

我发现了一个解决方案,只是改变了- (id)initWithView:(UIView *)view {方法。它返回me,我改变了它回到[me autorelease]

问候