ARC是否在任何自定义-dealloc代码之前或之后在-dealloc中插入代码?

Pro*_*ber 3 iphone memory-management ipad ios automatic-ref-counting

有时我仍然需要编写一个-dealloc方法来进行清理.在极少数情况下,我需要引用实例的属性来正确地进行清理.例如从NSNotificationCenter取消注册给定的发件人对象,该对象由属性拥有和引用.

ARC是否在我自己的代码之后插入了它的属性释放代码,还是在我自己的代码之前将它插入-dealloc的开头?

如果ARC将在任何自定义-dealloc代码之前插入代码,那么这将非常危险,因为如果需要,您将无法再访问属性.

这个问题是关于ARC在合成的-dealloc中插入属性释放代码的地方,而不是关于实现-dealloc还是不实现.

bea*_*lex 7

我想,所有内容都在这里说:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#misc.special_methods.dealloc

7.1.2.的dealloc

如果程序包含选择器dealloc的消息send或@selector表达式,则程序格式不正确.

理由:没有合理的理由直接调用dealloc.

类可以为名为dealloc的实例方法提供方法定义.此方法将在对象的最终版本之后但在解除分配或销毁其任何实例变量之前调用.当方法返回时,将自动调用超类的dealloc实现.

基本原理:即使ARC自动销毁实例变量,仍然有合理的理由编写dealloc方法,例如释放不可保留的资源.在这种方法中未能调用[super dealloc]几乎总是一个bug.有时候,对象只是试图阻止自己被破坏,但是dealloc对于提出这种异议的对象实在太晚了.更合理的是,一个对象可能已经被池分配,不应该免费释放; 目前,这只能通过ARC之外的dealloc实现来支持.这样的实现必须非常小心地完成NSObject的dealloc所能完成的所有其他工作,这超出了本文档的描述范围.

  • 这是确定的,但如果您想要更加用户友好的解释,请观看[WWDC 2011](http://developer.apple.com/videos/wwdc/2011/)中的*Introducing Automatic Reference Counting*视频. (2认同)