【发布时间】:2012-08-28 21:33:08
【问题描述】:
我使用带有 ARC 的 xcode 4.4。我在 ViewController.m 中动态创建了 UIViews:
UIView* myviews[10];
然后在 - (void)viewDidLoad 函数中,我用我需要的图片填充每个函数
myviews[viewIndex] = [[UIView alloc]initWithFrame:myrec];
UIImage *testImg;
UIImageView * testImgView = [[UIImageView alloc]init];
testImg = [UIImage imageNamed:[NSString stringWithFormat:@"imgarray%d.png", viewIndex];
[testImgView setImage:testImg];
[myviews[viewIndex] addsubView:testImgView];
viewindex++;
所以一切似乎都很好,当我想从一个视图跳转到另一个视图时,接下来我会使用两个按钮:
[self.view addSubview:views[viewIndex]];
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setDuration:1.0f];
[animation setType:@"rippleEffect"];
[animation setSubtype:kCATransitionFromTop];
//[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view.layer addAnimation:animation forKey:@"transitionViewAnimation"];
似乎没什么不好,但是当我在视图之间切换时,内存消耗会以惊人的速度增长。然后我会收到内存不足的警告,或者有时应用程序会崩溃。
我尝试使用 UIViewController 数组并在控制器之间切换:没有任何变化,内存不足警告是我最终的结果..
也许我需要以某种方式清理内存?但是怎么做? ARC不允许使用release等..
在添加新子视图之前我尝试过的最后一个(对不起,可能不是很专业)是这样的
NSArray *viewsToRemove = [self.view subviews];
for (UIView *views in viewsToRemove) {
[views removeFromSuperview];
}
但这也无济于事。
编辑:我需要澄清一件事:在应用程序执行期间我需要每个 UIView,这意味着我不能在应用程序退出之前释放它。
EDIT2:对代码进行编辑,使其看起来更像真实代码。
【问题讨论】: