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