iOS-开启arc之后 NSNotificationCenter removeObserver 是否需要调用

开启ARC之后,NSNotificationCenter removeObserver 是否需要调用,在何时调用?

今天在stackoverflow上面看到一个问题,arc情况下是否需要调用removeObserver,自己想了想,的确是个问题,就研究了一下。

上代码:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter]   removeObserver:self];
}

本来想着在arc中dealloc方式是已经遗弃的了,但是事实是它还存在,但是不能像mrc中那样还需要调用一下[super dealloc],在arc环境下,这个方法是不能用的,否则编译器直接就报错。 
后来我就想到dealloc方式会正常调用吗?

下面是添加观察者的方法:

[[NSNotificationCenter defaultCenter] addObserver:self
                                                     selector:@selector(method:)
                                                         name:@"postkey"
                                                       object:nil];

这个方法第一个参数Observer是不会对它进行retain操作,所以不会形成循环引用,但是还有必要调用removeObserver吗?

答案当然是:有必要!

如果这个对象被释放,当在调用post消息的时候,就会报对象被释放的错误,导致闪退,所以在添加观察者的对象,一定要在它被销毁的时候从消息中心删除!

时间: 2024-08-06 03:43:53

iOS-开启arc之后 NSNotificationCenter removeObserver 是否需要调用的相关文章

iOS开发ARC内存管理技术要点

本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging 技术交流新QQ群:41

iOS 下ARC的内存管理机制

本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是

大钟的ios开发之旅(2)————简单说说ios中ARC与非ARC模式下的property的变量修饰词

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

iOS开发ARC内存管理

本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC). Automatic Reference Counting (ARC) is a compiler-level feature that simplifies the process of managing object lifetimes (memory management)

学习IOS开发UI篇--NSNotificationCenter通知中心

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信.NSNotificationCenter 的通信原理使用了观察者模式; 1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block 2. NSNotificationCenter 在某个时机激发事件(以字符串命名) 3. 观察者在收到感兴趣的事件时,执行相应的 Selec

(转)iOS开发ARC内存管理技术要点

转自:http://www.cnblogs.com/flyFreeZn/p/4264220.html 本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 A

关闭或开启ARC

Xcode5之后创建项目,默认会自动开启ARC自动引用计数机制,但我们在实际应用开发中考虑到种种原因,有时候不得不关闭(开启)整个应用或部分类的ARC. 步骤为: project -> Build settings -> Apple LLVM 6.0 - Language-Objective C -> objective-C Automatic Reference Counting设置NO为关闭整个ARC,设置YES为开启. 有时候我们在引入第三方类库的时候,由于第三方类库不支持ARC,

iOS 在 ARC 环境下 dealloc 的使用、理解误区

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 下图最后一句话,解开了俺接触 ARC 以来一直的误解: 在 ARC 环境下,重载的 dealloc 方法一样会被调用,只不过,不能在该方法的实现中

iOS中arc的设置与使用

工程配置arc方案: 1,直接在targets->build phases中修改compiler Flags,是否支持arc.添加:-fobjc-arc,就可以让旧项目支持arc.如果想让原来支持arc的不使用arc则添加-fno-objc-arc iOS中arc的设置与使用