2013-12-09 35 views
0

我發現了一個奇怪的問題。爲什麼一個自動合成的財產的伊娃即使在財產設置後仍保持爲零?

在這個例子中,在iPhone Retina(4英寸)模擬器上使用iOS 7.0的Xcode 5.0.2應該是不可能的。

在UIView子類的屬性被定義爲:

@property (nonatomic, strong) EAGLContext *context; 

沒有定製getter或setter。所以應該創建ivar應該是_context

似乎伊娃存在,但是當我分配一些伊娃仍然無效。

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

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

這怎麼可能?

要排除衝突我重構屬性爲「context123」,但結果相同。 LLDB調試器會說_context123爲零。

我對這個問題的答案會立即出現。這是一個有趣的問題,其他人可能會發現有用的知道。

回答

1

原因是一個子類意外地覆蓋了這個屬性。這會導致在子類中創建碰撞的伊娃,其值會影響超類中的伊娃。

+0

好的。我剛剛失去了一小時的「神奇」持續零。爲了增加混淆,似乎有可能將有效值從表面上'nil'屬性中複製出來。 – Chris

+0

@openfrog:在允許子類使用ivar的同時修正這個問題的最佳方法是什麼? – moonman239

相關問題