我正在制作的应用程序不断遇到“内存警告”,并最终崩溃。在我创建的自定义视图控制器类上调用 release 时,似乎没有释放内存,其视图已添加为子视图。
这是我的情况的一个例子:
我创建了一个带有 .xib 的视图控制器(添加一种允许用户选择要播放的视频的弹出框/菜单)。屏幕/应用程序右上角的按钮调用一个函数,该函数分配我创建的 videoMenu 类的新实例,然后将其视图添加为子视图。当用户选择视频时,会调用一个函数来隐藏弹出框/菜单的视图,然后释放实例(在显示/播放视频之前)。如果菜单“打开”并且再次按下按钮,我将其设置为像关闭按钮一样(隐藏然后释放菜单)......即它切换菜单。
如果我一直按下按钮,菜单会出现,然后隐藏/释放......一遍又一遍......这是预期的。我注意到虽然在 Instruments->Allocations 中调用 release 时,分配并没有减少。当我打开/关闭/打开/关闭/等时,分配只会不断增加,好像释放实际上并没有释放内存。我在菜单中添加了一个NSLog
以dealloc
确保它dealloc
实际上被调用了。
我注意到,如果我在调用[videoMenu.view removeFromSuperview]
之前调用[videoMenu release]
,分配实际上会减少。
是removeFromSuperview
解决方案吗?有必要吗?
.xib 文件中有很多UIImageViews
,我也想知道它们是否是分配不断增加的原因(在我上面概述的示例中)......这意味着相同的图像是否只是一遍又一遍地被缓存?