Objective-C学习笔记 UIView内存释放问题

移动开发 iOS
本文介绍的是Objective-C学习笔记 UIView内存释放问题,主要讲述了对内存的相关操作,具体内容我们来看本文详解。

Objective-C学习笔记 UIView内存释放问题是本文要介绍的内容,UIView内存释放,之前一直以为把alloc的UIView对象,最后release掉或者removeFromSuperview掉就可以了。但是最近项目中出现了当释放父试图时,子视图内存不释放,最后导致内存泄漏,报内存警告最后程序崩溃。

造成UIview内存泄漏的原因是,当释放UIView时,其子视图中有占有的资源没有释放掉,如动画没有结束,最后造成内存不会释放掉。

下面的代码能够很好的展示上述过程:

在主视图上添加一个AnimationView,然后在AnimationView中在添加一个视图:

  1. Animations *animationView=[[Animations alloc] initWithFrame:CGRectMake(10, 10, 270, 400)];   
  2.         [animationView setBackgroundColor:[UIColor yellowColor]];   
  3.         [self addSubview:animationView];   
  4.         [animationView release]; 

在Animations视图中添加一个递归的动画:

  1. - (void)wobble {   
  2.     NSLog(@">>>>>>>>>>>>>>>>>>");   
  3.         CGFloat rotation = (kWobbleRadians * M_PI * 2) / 360.0;   
  4.         CGAffineTransform wobbleLeft = CGAffineTransformMakeRotation(rotation);   
  5.         [UIView beginAnimations:nil context:nil];   
  6.         [UIView setAnimationDuration:kWobbleTime];   
  7.         [UIView setAnimationDelegate:self];   
  8.         self.transform = wobbleLeft;   
  9.    //     if (!releaseFlage) {   
  10.             [UIView setAnimationDidStopSelector:@selector(wobble)];   
  11.    //     }   
  12.         [UIView setAnimationRepeatAutoreverses:NO];   
  13.         [UIView commitAnimations];   

由于当前类每隔3秒钟要执行一次递归,所以当在主视图中移除AnimationView时,由于AnimationView的子视图动画是一个递归没有结束,所以当前这个视图树不会释放,只是不再界面上显示,最终造成内存泄漏。解决办法如下,当AnimationView想要移除时,需要将其子视图上的动画移除掉。我的做法是在AnimationView中添加下面方法即可:

  1. - (void)willRemoveSubview:(UIView *)subview   
  2. {   
  3.     Animations *downBookView=(Animations *)subview;   
  4.     downBookView.releaseFlage=TRUE;   

这样内存视图树就会跟着释放掉内存,从系统中彻底释放掉了。

小结:Objective-C学习笔记 UIView内存释放问题的内容介绍完了,希望本文对你有所帮助。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c问题

2011-08-05 14:03:39

Objective-C 对象 模板

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2011-05-11 15:45:50

内存管理Objective-C

2011-08-15 16:09:44

Cocoa对象Objective-C

2011-07-27 16:36:03

iphone Objective- 静态库

2011-07-20 17:04:43

Objective-C 内存 内存泄露

2011-07-21 09:32:07

Objective-C 内存 Autoreleas

2011-07-21 10:10:42

Objective-C 内存 Autoreleas

2011-07-18 17:14:16

Objective-C 内存 Cocoa

2011-05-11 14:06:49

Objective-C

2011-08-04 10:38:17

Objective-C 预处理程序

2011-08-04 11:04:14

Objective-C 面向对象 继承

2011-08-16 17:43:47

Objective-C内存管理Autorelease

2011-08-01 11:37:41

iPhone Objective- 内存

2011-08-18 13:28:35

Objective-C内存

2011-07-29 16:08:31

Objective-C 内存

2011-07-25 10:03:06

Objective-C 委托

2011-07-25 14:27:10

Objective-C 协议 函数
点赞
收藏

51CTO技术栈公众号