Scrollview与图像仍然崩溃甚至懒惰负载?

时间:2011-02-18 01:39:34

标签: ios uiscrollview

我有一个滚动视图,其中包含一些图像,每个图像大约100KB。我通过创建uiviewcontrollers来保存它们,将它们添加到uiscrollview。控制器存储在scrollview中。我从superview中删除它的视图,并在图像滚出可见区域时用一些字符串替换它。我想我做得很好。但是滚动几次后我仍然会崩溃(甚至在相同的5张图像上向前和向后滚动)。

我注意到每个控制器的dealloc在从滚动视图中删除时被调用,而不是它的viewDidUnload。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

viewDidUnload自己发布视图时,会调用

viewController。如果发布了视图,则会被调用(这意味着viewDidUnload仅与内存警告情况相关)。要完全删除视图及其视图控制器,应从其超级视图中删除视图,然后释放视图控制器。然后它是正常的viewDidUnload没有被调用。

很难理解你是如何实现这一点的,以及为什么它出错了。但是,让我提出一些建议。

视图控制器的方法,例如viewWillAppearviewDidAppearviewWillDisappearviewDidDisappear等在这里没用,因为它们都不能告诉你视图是目前在屏幕上还是没有。您可以告诉的唯一方法是每次滚动时(通过UIScrollViewDelegate的委托方法)获取滚动视图的contentOffset,并检查这些视图是否在可见区域上。

因此,没有必要在那里使用UIViewController。只需使用视图,例如UIImageView。在视图可见时动态创建视图实例,或者当视图接近可见区域时动态创建视图实例。

答案 1 :(得分:0)

我遇到了这个问题,现在解决了。希望它适用于其他人。 :)
下面是导致崩溃的代码示例(第3行):

UIImage *image = [image imageNamed:@"img.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[image release]; // Need not release here!!!
...
[cellView addSubview:imageView];
[imageView release];