资讯专栏INFORMATION COLUMN

为什么ViewController释放后不走dealloc

HollisChuang / 2597人阅读

摘要:在一个项目中,如果使用完成之后,发现这个东东并没有释放掉,方法不走,看着那个内存蹭蹭的网上增,就跟自己的火气一样。相信大家都知道如何去释放一个不用的,但是还是有些其他因素限制了内存释放。

在一个项目中,如果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,至于原因。 ———————— 看了一个帖子,上面说:子类是父类的继承,比较NB,以至于要杀死他们的时候应该先干掉比较牛B的子类。 看完后我就记住了。很有意思~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15777.html

相关文章

  • ARC 模式下的循环引用引起内存泄漏

    摘要:因为强引用,的引用计数永远不会减为,当原本的强引用对象被释放以后,和成为了一个相互引用的孤岛,永远不会被释放了,这就会引起内存泄漏。在上面的例子中,就是一种非常普遍的引用循环情况,加入如上代码的在或者以后,并不会执行方法,证明内存泄漏了。 自从iOS 5时代自动引用计数(Automatic Reference Counting)技术发布,Cocoa工程师们才扔下了内存管理的包袱,从此在...

    李增田 评论0 收藏0
  • NSTimer学习笔记

    摘要:是一个模式集合,当绑定一个事件源到这个模式集合的时候就相当于绑定到了集合内的每一个模式。下面三种是内部框架支持用来监控对象的回复的,很少能够用到。用于标明和相关的事件。用于跟踪触摸事件触发的模式例如上下滚动。 NSTimer是iOS最常用的定时器工具之一,在使用的时候常常会遇到各种各样的问题,最常见的是内存泄漏,通常我们使用NSTimer的一般流程是这样的 在ViewControll...

    The question 评论0 收藏0
  • iOS开发基础篇--NSNotificationCenter使用小结

    摘要:所以使用的情况是两者有直接的关系,至于一方知道另一方的存在。这是一个我的交流群,群文件自行下载,不管你是小白还是大牛热烈欢迎进群,分享面试经验,讨论技术,大家一起交流学习成长希望帮助开发者少走弯路。 前言 最近公司组织两个星期的新人培训,事情安排的满满的,周末都没有。说好的一个星期一更新的博客中断了,让大家久等了,现在培训结束,终于又可以安安静静的做一个程序员了,好开心。。。 一、NS...

    dmlllll 评论0 收藏0
  • IOS释放自注销模式设计

    摘要:也就是自动调用注销的时机确定在对象释放时。相比方案,方案的对工程的影响范围小,而且只有使用自动注销的对象才会产生代价。负责销毁关联对象的销毁。通过引入,实现了观察者释放时,可以自动注销相对应的事件观察。 日常开发中,我们经常会注册一些通知、发起一些请求,当我们不需要时应及时注销通知,取消掉请求。否则,就有可能产生问题或者崩溃。比如我们会在控制器的viewDidLoad里面注册一些通知,...

    Worktile 评论0 收藏0
  • iOS中控制器的释放问题

    摘要:中控制器的释放问题工程是可以重写方法并被系统调用的,但不需要手动调用父类的,手写方法会报错,事实上系统会自动帮你调用父类的方法,不需要你实现。可以通过在方法中打印查看控制器是否被释放。导致控制器无法被释放,最终导致内存泄漏。 showImg(http://7xke07.com1.z0.glb.clouddn.com/2015-10-14-iOS-ViewControllerDeallo...

    Yi_Zhi_Yu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<