首页 / 知识
关于macOS:在可可中,我需要在取消分配对象时从接收KVO通知中删除该对象吗?
2023-04-12 09:12:00

In Cocoa do I need to remove an Object from receiving KVO notifications when deallocating it?
当我注册了一个对象foo以便从另一个对象栏接收KVO通知时(使用addObserver:...),如果我随后取消分配foo,我是否需要向-dealloc中的bar发送一条
您需要在运行 比这更好的是,有一个确定性的点,即拥有正在进行观察的对象的任何人都可以告诉它已经完成,并且将(最终)被释放。这样,您就可以在不再需要进行观察的事物时立即停止观察,而不管它何时真正释放。
要记住这一点很重要,因为可可中物体的寿命并不像某些人认为的那样具有确定性。各种Mac OS X框架本身都会向您发送对象
此外,当您过渡到Objective-C垃圾收集时,您会发现
坚持 我从痛苦的经验中获得了一些额外的信息:尽管在垃圾回收下运行NSNotificationCenter时,使用弱引用归零,但KVO却没有。因此,可以避免在使用GC时不删除NSNotificationCenter观察器(使用保留/释放时,您仍然需要删除观察器),但是您仍然必须按照Chris的描述删除KVO观察器。 绝对同意Chris关于"在-dealloc和-finalize ...中保留内存(和其他稀缺资源)的管理"的评论。很多时候,我会看到人们尝试在其dealloc函数中使NSTimer对象无效。问题是,NSTimer保留了它的目标。因此,如果该NSTimer的目标是self,则dealloc将永远不会被调用,从而导致潜在的讨厌的内存泄漏。
在 |
最新内容
相关内容
Python如何创建对象,有哪些方法
Python如何创建对象,有哪些方法,培训,对象,方法,内容,函数,属性,所在,以上,以下,功能,以下介绍Python创建对象的9种方法。classPoint:def__inipython对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python怎么删除列表的第一个元素
python怎么删除列表的第一个元素,培训,风险,元素,索引,列表,尾部,参数,字符串,特性,典型,python删除列表的第一个元素的方法:我们以一个字符串python怎么删除python
python怎么删除python,培训,设计,项目,平台,语言,新功能,初学者,脚本,下面,以上,Python是一种跨平台的计算机程序设计语言。是一种面向对象的python类和对象的区别是什么
python类和对象的区别是什么,培训,主体,汽车,状态,对象,定义,属性,方法,实例,区别,类和对象1、类和对象得区别:类是对客观世界中事物得抽象,而python如何判断对象的某个属性
python如何判断对象的某个属性,培训,异常,名称,方法,对象,属性,特性,参数,逻辑,以上,在python判断某个对象是否具有某属性可以使用以下方法方python怎么删除里表中的前几个元素
python怎么删除里表中的前几个元素,培训,元素,索引,根据,范围内,尾部,时会,所在位置,除此之外,数据类型,列表是python语言中最基本的数据类型python如何删除空格
python如何删除空格,代码,培训,信息,字符串,空白,方法,左边,字符,右边,上面,python中的字符串方法提供了如下常用的方法来删除空白:strip():删python如何对数组删除元素
python如何对数组删除元素,培训,元素,数组,索引,根据,时会,所在位置,以上,以下,操作,python中关于对列表元素的删除操作,有以下几种方式1.remopython如何实例化对象
python如何实例化对象,培训,名称,实例,括号,关键字,对象,函数,字母,方式,以上,python中同样使用关键字class创建一个类,类名称第一个字母大写,python列表怎么删除元素
python列表怎么删除元素,培训,元素,索引,根据,方法,列表,时会,所在位置,以上,更多,python中关于删除list中的某个元素,一般有三种方法:removepython判断对象是否有某个属性
python判断对象是否有某个属性,培训,名称,异常,属性,对象,方法,参数,定义,以上,更多,python判断对象是否有某个属性的方法:hasattr(object,nam