NSLog'ing会改变其保留计数吗?因为我在这里慢慢疯了

时间:2010-08-26 16:39:30

标签: objective-c nsthread

继续这个问题:NSRunLoop is receiving a strange selector; possible race condition tomfoolery? - 在发现UIGestureRecognizer被解除分配然后收到消息的地方,我打印出我的一个遗传资源的地址,以查看它是否是一个据僵尸报道。

使用代码中的打印消息,我不能再导致我最初寻找的崩溃。删除打印消息,似乎我可以再次导致它。

由于我们正在处理释放/保留/释放问题,任何人都可以告诉我,打印出这个对象是否可能导致它被引用,从而避免重新分配?如果是这样,那告诉我原来的问题是什么?释放太多了?发布得太早了?

2 个答案:

答案 0 :(得分:2)

如果对NSLog的调用来自后台线程,那么很可能会改变事件的顺序。 NSLog以某种方式同步写入stderr - 我不确定如何,但认为一个后果可能是对象生命周期的改变并不是牵强附会。

关于原始问题告诉你什么,听起来它确认了Dave DeLong的诊断:你正在尝试使用陈旧的指针。这反过来意味着调用的代码位不能保持适当,或者其他一些位过度释放。

答案 1 :(得分:1)

在Mac和iOS开发的10年中,我从未想到NSLog做了一些不好引用计数的东西。这就是我可以肯定的。