首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么自动合成属性的ivar在属性设置后仍然为空?

为什么自动合成属性的ivar在属性设置后仍然为空?
EN

Stack Overflow用户
提问于 2013-12-09 23:58:08
回答 1查看 173关注 0票数 0

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

在这个例子中,Xcode5.0.2和iOS 7.0在"iPhone视网膜(4英寸)“模拟器上发生了一些不应该发生的事情。

UIView子类中的属性定义为:

代码语言:javascript
复制
@property (nonatomic, strong) EAGLContext *context;

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

看起来依瓦尔是存在的,但是当我赋值的时候,依瓦尔仍然是零。

代码语言:javascript
复制
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

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

这怎么可能呢?

为了排除冲突,我将属性重构为"context123“,但结果相同。LLDB调试器会显示_context123为nil。

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

EN

回答 1

Stack Overflow用户

发布于 2013-12-09 23:59:49

原因是一个子类意外地覆盖了这个属性。这会导致在子类中创建一个冲突的ivar,它的值隐藏在超类中的ivar。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20474911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档