Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2697346
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-09-18 07:06:19

/> 最近看项目,有一些疑问:

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;

}

http://blog.sina.com.cn/s/blog_71715bf80101ioth.html

Dealloc

让我们看看这些错误,然后一个一个的修复他们。 我们从 dealloc 开始:

IOS开发之 <wbr>---- <wbr>ARC下的Dealloc保留原因

dealloc 中的每一行都会有一个错误。 我们不再被允许调用 [release] 了, 也不允许调用 [super dealloc]。 因为我们在 dealloc 不再做任何操作了, 所以我们可以直接把这个方法删除掉。

唯一一个留着 dealloc 方法的原因就是, 你需要释放一些不在 ARC 控制下的资源。 例如 Core Foundation 对象中调用 CFRelease(), 对那些通过 malloc() 分配的内存调用 free(), 注销通知,停止 Tiner, 等等。

如果你是一个对象的代理的话,有时必须显式的断开和它的连接,但通常这都是自动的。 大部分情况下,代理都是弱引用(我们马上会介绍到), 当一个即将被释放的对象是其他对象的代理的话, 当这个对象被销毁时,代理指针将会被自动设置为 nil。 弱指针在这之后会被自动清楚。

另外, 在你的 dealloc 方法中, 你仍然可以使用实例变量, 因为他们在这时候还没被释放掉。 在 dealloc 返回之前,都不会被释放。

阅读(1197) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~