美文网首页
ARC中,为什么还需要dealloc()函数?

ARC中,为什么还需要dealloc()函数?

作者: 梅西121 | 来源:发表于2016-10-25 14:32 被阅读392次

    1.项目中使用了ARC,为什么还要在dealloc函数里

    对控件进行removeFromeSuperview操作,并置为nil。2.property中的控件都需要在dealloc中

    removeFromeSuperview吗?项目中我看到有的没有。3.dealloc中控件removeFromeSuperview有顺序区分吗?

    1.项目中使用了ARC,为什么还要在dealloc函数里  对控件进行removeFromeSuperview操作,并置为nil

    是为了告诉 系统 这东西 可以释放内存了

    2.property中的控件都需要在dealloc中removeFromeSuperview吗?项目中我看到有的没有

    最好要,不写没问题,只不过是释放早晚的问题。

    3.dealloc中控件removeFromeSuperview有顺序区分吗

    最好先释放子view,然后父view

    可以进行一些移除通知的操作,removeNotification

    http://blog.csdn.net/musou_ldns/article/details/7673795

    众所周知,iOS开发的时候,使用ARC的话,dealloc函数是不需要实现的,写了反而会出错。

    但有些特殊的情况,dealloc函数还是需要的。

    比如,在画面关闭的时候,需要把ViewController的某些资源释放,

    在viewDidDissppear不一定合适,viewDidUnload一般情况下只在memory warning的时候才被调用。

    不用ARC的情况下,我们自然会想到dealloc函数。

    其实ARC环境下,也没有把dealloc函数禁掉,还是可以使用的。只不过不需要调用[supper dealloc]了。

    举个例子,画面上有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;

    }

    相关文章

      网友评论

          本文标题:ARC中,为什么还需要dealloc()函数?

          本文链接:https://www.haomeiwen.com/subject/rzpruttx.html