Objective-C对象初始化后为零

Objective-C对象初始化后为零,objective-c,lldb,Objective C,Lldb,好吧,我对Objective-C并不陌生,但我遇到了一个奇怪的bug,这是我以前从未见过的。也许我只是犯了一个小错误,你能看到 在我的一个函数中,我首先通过以下方式从自定义视图类创建一个新对象: [buttonsBackground removeFromSuperview]; self.buttonsBackground = [[[PostCommentButtonsBackground alloc] initWithFrame:self.contentView.bounds] autorele

好吧,我对
Objective-C
并不陌生,但我遇到了一个奇怪的bug,这是我以前从未见过的。也许我只是犯了一个小错误,你能看到

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

[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>>
因此,丢失的保留也不是这样

编辑:好吧,我刚刚看到,我不是唯一一个有同样问题的人。还有另一个人有同样的问题


不管怎样,我只是让这篇文章保持开放,因为在另一篇文章中,人们一直声称,开发人员在内存管理方面做得很糟糕。在我的帖子中,你可以看到事实并非如此。

使用新Xcode 4.3的LLDB有时会完全丢失,使用NSLog而不是LLDB将向你显示初始化的对象已正确初始化,而不是
nil


因此,当你面对一个bug时,这真的是一种痛苦。

为什么不使用self.property呢?您似乎在混合,这通常不是一个好主意。因为self.property仅与内存管理相关,而且由于上面的块是函数中发生的第一件事,因此没有局部变量的危险。您是否通过GDB查看过这一点?可能只是LLDB的一个bug。我看不出你的内存管理有什么问题。(要么是这样,要么是我一直在做错事)@Infinite:
self.property
不仅仅与内存管理相关。如果你有一个属性,除了在
-init
-dealoc
@jeremyP中,你应该在任何地方使用它,它还应该与什么相关?例如,特别是在init中,甚至不鼓励使用self。但除此之外,它只在LLDB中发生,而不在GDB中发生。但如果您使用GDB,xcode会不断抛出警告,以将您的项目升级为使用LLDB。。。注释
@property(nonatomic, retain)PostCommentButtonsBackground *buttonsBackground;