UIView内存释放,之前一直以为把alloc的UIView对象,最后release掉或者removeFromSuperview掉就可以了。但是最近项目中出现了当释放父试图时,子视图的内存不释放,最后导致内存泄漏,报内存警告最后程序崩溃。
造成UIview内存泄漏的原因是,当释放UIView时,其子视图中有占有的资源没有释放掉,如动画没有结束,最后造成内存不会释放掉。
下面的代码能够很好的展示上述过程:
在主视图上添加一个AnimationView,然后在AnimationView中在添加一个视图:
Animations *animationView=[[Animations alloc] initWithFrame:CGRectMake(10, 10, 270, 400)];
[animationView setBackgroundColor:[UIColor yellowColor]];
[self addSubview:animationView];
[animationView release];
在Animations视图中添加一个递归的动画:
- (void)wobble {
NSLog(@">>>>>>>>>>>>>>>>>>");
CGFloat rotation = (kWobbleRadians * M_PI * 2) / 360.0;
CGAffineTransform wobbleLeft = CGAffineTransformMakeRotation(rotation);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:kWobbleTime];
[UIView setAnimationDelegate:self];
self.transform = wobbleLeft;
// if (!releaseFlage) {
[UIView setAnimationDidStopSelector:@selector(wobble)];
// }
[UIView setAnimationRepeatAutoreverses:NO];
[UIView commitAnimations];
}
由于当前类每隔3秒钟要执行一次递归,所以当在主视图中移除AnimationView时,由于AnimationView的子视图动画是一个递归没有结束,所以当前这个视图树不会释放,只是不再界面上显示,最终造成内存泄漏。解决办法如下,当AnimationView想要移除时,需要将其子视图上的动画移除掉。我的做法是在AnimationView中添加下面方法即可:
- (void)willRemoveSubview:(UIView *)subview
{
Animations *downBookView=(Animations *)subview;
downBookView.releaseFlage=TRUE;
}
这样内存其视图树就会跟着释放掉内存,从系统中彻底释放掉了。
分享到:
相关推荐
UIView 动画 UIView动画
ios中关于uiview
UIView+Extension 对view的一个扩展
UIView AutoLayout ,UIView AutoLayout 是 UIView 的分类,实现了自动布局限制的简单接口。 T...
详细讲解UIView的生命循环周期,对开发者有更好的启发作用,深层次了解程序运行的流程。
1、将UIView 保存为图片,按照给定的scale 2、stackoverflow参照 3、保存的图片为依据scale,亲测
+ (UIView *_Nullable)az_gradientViewWithColors:(NSArray*> *_Nullable)colors locations:(NSArray*> *_Nullable)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint; - (void)az_...
为UIView添加圆角扩展
已封装好的实现渐变的UIView,只需传入渐变开始值和结束值就可直接使用。有四种渐变方向可选
UIView-Positioning, 在UIView对象中,基于简单属性的框架属性设置 uiview定位收费 UIView Positioning 是一个快速扩展,它提供简单的shorthand 方法,以方便的方式定义任何UIView对象的框架属性( 宽度,高度,x,y ...
简单的把UIView转化为UIImage,大家可以看下。
iOS中UIView的翻页动画demo 有几个是私有的api,小心使用。
通过协议扩展高斯模糊任意 UIView.zip,对任何具有swift协议扩展的uiview应用高斯模糊
iPhone开发学习笔记005——使用XIB自定义一个UIView,然后将这个view添加到controller的view。
uiview+frame,方便UI布局,码农工具,第一次上传,测下好用不
好程序员学习笔记--UI基础UIWindow、UIView.doc
自定义UIView动画 http://blog.csdn.net/brycegao321/article/details/53817222
轻量级组件能够让所有 UIView 都支持进度条展示
UIView 震动动画效果 AFViewShaker ,AFViewShaker 是一个简单的工具用来执行 。 使用方法: AFViewShaker *...
这个demo只是用来完成一个功能,就是按需求绘制顶部为凹进圆弧的UIView。