2

好的,我不是新手,Objective-C但我遇到了一个奇怪的错误,这是我以前从未见过的。也许我只是犯了一个小错误,你可以看到它。

在我的一个函数中,我首先通过以下方式从自定义视图类创建一个新对象:

[buttonsBackground removeFromSuperview];
self.buttonsBackground = [[[PostCommentButtonsBackground alloc] initWithFrame:self.contentView.bounds] autorelease];
buttonsBackground.delegate = self;

但是如果我用调试器跳过这个块,调试器声称这buttonsBackground将是一个零指针。但是在NSLog之后添加一个权利

NSLog(@"%@",self.buttonsBackground);

仍然打印该行

<PostCommentButtonsBackground: 0x7bd27a0; frame = (0 0; 320 82); layer = <CALayer: 0x6e688b0>>

这显然意味着它不能为零。有谁知道这怎么可能?

我使用的是 LLDB 调试器,而不是 GDB。该属性buttonsBackground被声明为

@property(nonatomic, retain)PostCommentButtonsBackground *buttonsBackground;

所以丢失的保留也不是这样。

编辑:好的,我刚刚看到,我不是唯一一个遇到完全相同问题的人。还有另一个人有同样的问题Debugger lldb 说我的对象是 nil 什么时候不是?

无论如何,我只是将这篇文章保持打开状态,因为在其他帖子中人们一直声称,开发人员在内存管理方面做得不好。在我的帖子中,您实际上可以看到,事实并非如此。

4

1 回答 1

3

带有新 Xcode 4.3 的 LLDB 有时会完全丢失,使用 NSLog 代替 LLDB 会显示您的初始化对象已正确初始化,而不是nil.

所以,当你面对一个错误时,这真的很痛苦。

于 2012-03-03T14:43:50.013 回答