我有一个滚动视图,其中包含一些图像,每个图像大约100KB。我通过创建uiviewcontrollers来保存它们,将它们添加到uiscrollview。控制器存储在scrollview中。我从superview中删除它的视图,并在图像滚出可见区域时用一些字符串替换它。我想我做得很好。但是滚动几次后我仍然会崩溃(甚至在相同的5张图像上向前和向后滚动)。
我注意到每个控制器的dealloc在从滚动视图中删除时被调用,而不是它的viewDidUnload。
感谢任何帮助。
答案 0 :(得分:0)
viewDidUnload
自己发布视图时,会调用 viewController
。如果您发布了视图,则不会被调用(这意味着viewDidUnload
仅与内存警告情况相关)。要完全删除视图及其视图控制器,应从其超级视图中删除视图,然后释放视图控制器。然后它是正常的viewDidUnload
没有被调用。
很难理解你是如何实现这一点的,以及为什么它出错了。但是,让我提出一些建议。
视图控制器的方法,例如viewWillAppear
,viewDidAppear
,viewWillDisappear
,viewDidDisappear
等在这里没用,因为它们都不能告诉你视图是目前在屏幕上还是没有。您可以告诉的唯一方法是每次滚动时(通过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];