为什么即使在设置属性后,自动合成属性的ivar仍然为零?

时间:2013-12-09 15:58:08

标签: ios objective-c properties

我发现了一个奇怪的问题。

在这个示例Xcode 5.0.2上,带有iOS 7.0,在" iPhone Retina(4英寸)"模拟器发生的事情应该是不可能的。

UIView子类中的属性已定义为:

@property (nonatomic, strong) EAGLContext *context;

没有自定义的getter或setter。所以应该创建_context ivar。

似乎ivar存在,但是当我分配东西时,ivar仍然是零。

self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

// breakpoint:
// "po [self context]" returns proper object.
// "po _context" returns nil

这怎么可能?

为了排除碰撞,我将属性重构为" context123"但结果相同。 LLDB调试器会说_context123为零。

我将立即回答这个问题。这是一个有趣的问题,其他人可能会发现有用的知识。

1 个答案:

答案 0 :(得分:1)

原因是子类意外覆盖了此属性。这会导致在子类中创建碰撞的ivar,其值会影响超类中的ivar。