内存警告后UITableView滚动问题

问题描述:

我创建了一个类似于iOS地址簿的UITableView,允许您在一行上选择图像,并且还有其他具有用于输入数据的文本字段的自定义单元。我只有在加载大图像并在控制台中获得内存警告后才遇到此问题:内存警告后UITableView滚动问题

收到内存警告。级别= 1

我在模态视图中使用UIImagePickerController加载图像。

所以,当内存不足的警告时,我的父母tableviewcontroller做了viewDidUnload,里面是空的:

- (void)viewDidUnload { } 

一旦我关闭模式视图(选择图像)时,tableview中重新加载数据,一切都显示正常...但是,滚动无法正常工作。行为非常奇怪:滚动不会停留在某个点上。我可以从字面上一直拖动滚动,但是一旦我释放,滚动就会反弹回来并隐藏底部细胞(这看起来很正常)。

对于我的生活,我无法弄清楚发生了什么,为什么这只发生在记忆警告后。

这只发生在我的iPhone上(使用iPhone 4进行测试)。这进一步导致我相信内存警告可能是我的问题的根源。

+0

我有完全相同的问题。你找出原因了吗? – 2011-11-27 11:02:25

您在[loadView]或[viewDidLoad]中设置的所有内容应该在[viewDidUnload]中清除。另一种方式:应该在[loadView]或[viewDidLoad]中重新创建并重新初始化[viewDidUnload]中销毁的所有内容。

您应该将其视为辅助init/dealloc序列。

+0

我现在这样做,所以我的viewDidUnload将对象设置为无法在viewDidLoad中分配,虽然这是很好的建议,但不幸的是不能解决滚动锁问题。 – Kevin 2010-10-02 19:01:54

+0

注意:将对象设置为零不会释放它。 – 2010-10-03 08:59:20

+0

我认为他的意思是用setter将它设置为零 – 2011-11-27 11:02:03

我有一个工作。在显示模态视图之前,您应该关闭键盘并等待其解除。

设置-(void)viewDidUnload;空是在这方面肯定是不对的,因为至少应调用[super viewDidUnload];否则,你将有两个表视图(甚至更多),因为控制器将保持他们创造的-(void)loadView;