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

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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,216评论 30 472
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 1,395评论 0 3
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,257评论 1 23
  • 1.Difference between shallow copy and deep copy? 浅复制和深复制的...
    用心在飞阅读 1,031评论 0 9
  • 今天是“八一”建军节,是每一名有过军旅生涯经历的人一辈子都难以忘怀的日子。每年的这一天,都会回想起很多,都会写...
    王京武阅读 938评论 3 0