Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 区分死弱参考与零值_Objective C_Memory Management_Weak References_Objective C Runtime - Fatal编程技术网

Objective c 区分死弱参考与零值

Objective c 区分死弱参考与零值,objective-c,memory-management,weak-references,objective-c-runtime,Objective C,Memory Management,Weak References,Objective C Runtime,据我所知,当我在Objective-C中解引用一个死弱引用时,我得到一个nil值作为结果。我想知道是否有任何方法可以真正判断变量消失后是否分配了一个弱值,而不是简单地将值nil(例如,如果从未分配引用) 我是否可以使用较低级别的运行时函数 我已经习惯于使用BOOL来记录引用被分配的时间,但这让我感觉很难看。不,没有办法判断弱引用是否已被设置为nil,因为它的引用已被解除分配 弱引用通过中的weak\u clear\u no\u lock设置为nil。否,无法判断弱引用是否已被设置为nil,因为其

据我所知,当我在Objective-C中解引用一个死弱引用时,我得到一个
nil
值作为结果。我想知道是否有任何方法可以真正判断变量消失后是否分配了一个弱值,而不是简单地将值
nil
(例如,如果从未分配引用)

我是否可以使用较低级别的运行时函数


我已经习惯于使用
BOOL
来记录引用被分配的时间,但这让我感觉很难看。

不,没有办法判断弱引用是否已被设置为
nil
,因为它的引用已被解除分配


弱引用通过中的
weak\u clear\u no\u lock
设置为
nil

否,无法判断弱引用是否已被设置为
nil
,因为其引用已被解除分配


弱引用被设置为
nil
,由
weak\u clear\u no\u lock
输入。

正如Rob所说,您不能直接执行。但你可以间接地这样做

通过使用关联对象,可以将
NSObject
的子类与弱引用的对象关联。在该子类中,重写
dealloc
,以通知某些内容弱引用对象正在被解除分配

只要您绝对确保弱引用对象对
NSObject
子类的关联引用是对子类实例的唯一强引用
,那么您已经有效地创建了一种接收弱引用对象何时被解除分配通知的方法


是的,它很易碎。另外一个对该子类实例的强烈引用,整个过程就停止了。

正如Rob所说,你不能直接做。但你可以间接地这样做

通过使用关联对象,可以将
NSObject
的子类与弱引用的对象关联。在该子类中,重写
dealloc
,以通知某些内容弱引用对象正在被解除分配

只要您绝对确保弱引用对象对
NSObject
子类的关联引用是对子类实例的唯一强引用
,那么您已经有效地创建了一种接收弱引用对象何时被解除分配通知的方法


是的,它很易碎。再对该子类的实例进行一次强引用,整个过程就停止了。

据我所知,没有。请注意,您并没有真正取消对弱引用的引用。当对象被解除分配时,引用本身为零;这不是簿记的问题“这个引用是否仍然有效?”据我所知,不。请注意,您并不是真正地取消引用弱引用。当对象被解除分配时,引用本身为零;这不是记账的问题“这个参考资料是否仍然有效?”