Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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
Iphone 什么';我的代码在比较Objective C中的指针时出错了吗?_Iphone_Objective C - Fatal编程技术网

Iphone 什么';我的代码在比较Objective C中的指针时出错了吗?

Iphone 什么';我的代码在比较Objective C中的指针时出错了吗?,iphone,objective-c,Iphone,Objective C,我有 及 这很有效 在Dealoc中,我尝试这样做 _rootExplorer = self; NSAssert(_rootExplorer == self, @"????"); 这是错误的,但调试器清楚地声明这两个对象是相同的,并且具有相同的物理地址 当我这样做的时候 bool b = _rootExplorer == self; 对于n2我得到一个非常大的数字,对于n我得到零。但是\u rootExplorer不是nil。但是,如果我在其他不是dealloc的函数

我有

这很有效

在Dealoc中,我尝试这样做

_rootExplorer = self;            
NSAssert(_rootExplorer == self, @"????");
这是错误的,但调试器清楚地声明这两个对象是相同的,并且具有相同的物理地址

当我这样做的时候

bool b = _rootExplorer == self;
对于
n2
我得到一个非常大的数字,对于
n
我得到零。但是
\u rootExplorer
不是
nil
。但是,如果我在其他不是
dealloc
的函数中执行相同的操作,
n
n2
是相同的


我的代码怎么了?我试图保留对堆栈中某个导航控制器的弱引用,在展开过程中,我需要释放资源,但只有被引用的控制器才允许这样做。

苹果公司说,“当没有对对象的强引用时,弱引用设置为零。”因此,我不认为您的代码有任何问题(…从某种意义上说,它的位置在ARC完成其工作之后)。

大概您打算发送消息给rootExplorer,让它清理?如果是这样,只需发送消息即可-如果它真的为零,您的消息将被忽略,不会造成任何伤害

如果它真的是nil,那么你可能在某个地方有一个bug,导致它在dealloc之前被设置成那样-也许它指向的对象正在被释放

切题地说,您可能无法信任调试器获得正确的值,尤其是在使用lldb的情况下。这个地区有已知的虫子。也可能存在争用-也许您的_rootExplorer与您自己的对象在同一时间被释放,而在调试器中停止只是碰巧改变了发生的顺序

bool b = _rootExplorer == self;
long n = (long) (_rootExplorer);
long n2 = (long) (self);