永发信息网

arc环境下dealloc方法中系统会自动做哪些事情

答案:2  悬赏:70  手机版
解决时间 2021-03-04 03:57
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后就不用手动去释放了,也没有此函数了!
全部回答
所周知,iOS开发的时候,使用ARC的话,dealloc函数是不需要实现的,写了反而会出错。
有些特殊的情况,dealloc函数还是需要的。比如,在画面关闭的时候,需要把ViewController的某些资源释放,在viewDidDissppear不一定合适,viewDidUnload一般情况下只在memory warning的时候才被调用。
MRC的情况下,我们自然会想到dealloc函数。
使用情况
其实ARC环境下,也没有把dealloc函数禁掉,还是可以使用的。但不用手动调用[supper dealloc]了,因为系统在此方法返回的时候自动执行[supper dealloc]。
在dealloc重写方法中,你可以释放一些不在 ARC 控制下的资源。 例如 Core Foundation 对象中调用 CFRelease(), 对那些通过 malloc() 分配的内存调用 free(), 注销通知,注销观察者,停止 Timer 等。
例子
画面上有UIWebView,它的delegate是该画面的ViewController,在WebView载入完成后,需要做某些事情,比如,把indicator停掉之类的。
如果在WebView载入完成之前关闭画面的话,画面关闭后,ViewController也释放了。但由于WebView正在载入页面,而不会马上被释放,等到页面载入完毕后,回调delegate(ViewController)中的方法,由于此时ViewController已经被释放,所以会出错:message sent to deallocated instance 。
解决方案
解决办法是在dealloc中把WebView的delegate释放。
-(void)dealloc
{
self.webView.delegate = nil;
}
1
2
3
4
1
2
3
4
总结
ARC 下, 不用手动调用[supper dealloc]了,因为系统在此方法返回的时候自动执行[supper dealloc]。在dealloc重写方法中,你可以释放一些不在 ARC 控制下的资源。 例如 Core Foundation 对象中调用 CFRelease(), 对那些通过 malloc() 分配的内存调用 free(), 注销通知,注销观察者,停止 Timer 等。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
Vb在窗体上,是用什么函数可以任意擦除所画的
碧水茗缘茶社NO.2在哪里啊,我有事要去这个地
从山东日照怎样做火车到广州最近?方便?
“谁言使君贫”出自哪一首诗词?
国家中长期人才发展规划纲要(2010—2020年)
和玉源我想知道这个在什么地方
开鸭脖店怎么样
内蒙古歌曲等你的歌词
山东大学研究生的微生物专业,在录取分数总校
【make money】makemoney与eranmoney的区别应
了解辛追夫人,是看《辛追传奇》还是看《大汉
“背靠背坐在地毯上,听听音乐聊聊愿望”是那
求一篇文章《我与公司共成长》,事迹真实 主
—We'd like you to start work tomorrow if
三星sm-g7108音量键坏了拿去修要多少钱
推荐资讯
形容词是用在名词前面吗?
山茶油能不能去除眼袋
下列几组力的合力可能是35N的是(  )A.35
超市多久点一次货架上的货物数量看是否有少?
湘潭市二手房土地证如何办理过户手续?备注,
桌子的桌有哪些组词
单选题梅雨发生的时间是A.7、8月B.6月C.3~4
下列哪一种离子对人体细胞是有害的?A. Na+B.
铣床上刀具对刀时,应保证()。
生态环境办公的环境是怎么样的?有谁知道?
赛尔号精灵融合后等级会变吗?
渝广巴高速公路合川段经过哪些镇
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?