dealloc?为什么ViewController释放后不走dealloc
朋友们,dealloc和为什么ViewController释放后不走dealloc是当今热门话题,但是它们的内涵和影响力可能会让人感到困惑。在本篇文章中,我将为你们揭示它们的本质和重要性,希望能够为你们带来新的认识。
控制器dealloc了里面的控件还会占用内存吗
控制器dealloc了里面的控件还会占用内存
一般的原因有以下几种:
1.定时器没有被销毁.
解决方法:在viewWillDisappear之前需要把控制器用到的NSTimer销毁.
2. block块使用不当,因为block会对方法中的变量自动retain一次,请检查控制器中block代码.
3.代理必须得用weak修饰,用strong强引用会导致计数器加1,无法释放内存.(很多老项目中代理用的是strong,我就遇到了)
4.在getter方法里使用self.导致死循环.
arc环境下dealloc方法中系统会自动做哪些事情
Objective-c语言中最头疼的事就是内存释放,申明一个变量后记得一定要释放这个变量,在我的博客中已经有一些这方面的文章,我们定义的全局变量都是在-(void)dealloc函数中释放的;里面继承了一个[super dealloc]方法,有些同学平时自己释放内存都是写在 [super dealloc]的后面,但是在Objective-c中不能这样写,所有的释放都必须写在 [super dealloc]的前面。-------错误的写法---------(void)dealloc{ [super dealloc]; [XXX release];......}-------正确的写法---------(void)dealloc{ [XXX release]; [super dealloc];......}原因是:“你所创建的每个类都是从父类,根类继承来的,有很多实例变量也会继承过来,这部分变量有时候会在你的程序内使用,它们不会自动释放内存,你需要调用父类的 dealloc方法来释放,然而在此之前你需要先把自己所写类中的变量内存先释放掉,否则就会造成你本类中的内存积压,造成泄漏”.不过在IOS6有了ARC后就不用手动去释放了,也没有此函数了!
为什么ViewController释放后不走dealloc
在一个项目中,如果ViewController使用完成之后,发现这个东东并没有释放掉,dealloc方法不走,看着那个内存蹭蹭的网上增,就跟自己的火气一样。相信大家都知道如何去释放一个不用的ViewController,但是还是有些其他因素限制了内存释放。
首先,如果你创建了一个VController,使用它却没释放它,那这个VC肯定存在,那dealloc指定不调用,那么你创建的类就会内存泄露
textViewController* text= [[textViewController alloc] init];
[self.navigationController pushViewController:text animated:YES];
//[text release];
然后,如果你的VC中有NSTimer,那么就要注意了,因为当你
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
时,这个 target:self就增加了VC的RetarnCountr如果你不将这个timer invalidate,就别想调用dealloc。
再然后,一个比较隐蔽的因素,你反过头去找找看,跟这个类有关的代理,嗯,对是代理,有没有强引用的属性啊?对,比如一个代理的delegate应该是 assign的现在是retain,就是这个,它会影响你不让你调用dealloc,不信,就试试吧。
最后,如果以上都没有问题的话,那么,真问题就来了。我就遇到了这种情况,在使用ASI进行网络请求的时候,因为需求原因,我使用属性将名为 ASIFormDataRequest的NSOperation标记住了,就将上面的问题找了又找,就是不行,最后是将那个标记的属性置为 nil才解决了这个不调用 dealloc的这个蛋疼问题。所以,如果你遇到了比较隐蔽的原因,那就去找找你自己控制不了的因素,就像这个第三方。如果你不了解它的运行机制,那就一定要注意这个库对你程序的影响。嗯,善用XXX.delegate= self;
PS:dealloc中的释放也是有顺序的,就好比创建时,先父类,再子类,释放的时候反过来,不然有几率会crash,至于原因。
为什么控制器dealloc后内存并没有释放
你好,控制器自己delloc了但是不代表他持有的那些对象delloc了
举个例子 a持有 b b持有c
delloc调用顺序是 a-》b-》 C但是对象释放的顺序刚好反过来是c先释放然后b释放然后a释放
a比如就是你现在的控制器,a的delloc调用实际意思是告诉b我要释放了,你先释放,然后b就会调delloc b会告诉c我要释放了,但是我释放之前必须你先释放
到c c如果释放成功,b就释放成功,然后a就释放成功
所以你现在控制器delloc调用了只能说明a把这个想要释放的想法告诉b了至于b有没有释放你不知道,更不知道c有无释放
最终结果是内存并未减少,但是a的delloc调用了可以断定a本身无问题,问题出在a所持有的对象有未释放的
关于dealloc和为什么ViewController释放后不走dealloc的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。