Objective c _在具有自动合成属性的子类中使用underbar变量?

Objective c _在具有自动合成属性的子类中使用underbar变量?,objective-c,Objective C,今天在Xcode 4.6中遇到了这个问题,这让我大吃一惊。我使用的是自动合成属性(但手动合成没有任何区别) 我可以在TestA的实现中很好地访问\u foo,但不能在TestB中访问。我可以通过将id\u userInfo作为ivar声明放在TestA.h中来解决这个问题,但我不认为我必须这样做。这里发生了什么?范围。似乎自动生成的IVAR在默认情况下是@private,而不是@受保护的。下面是一个为什么自动生成的IVAR是private的原因。这看起来确实是怎么回事,但仍然有点令人惊讶。我认为

今天在Xcode 4.6中遇到了这个问题,这让我大吃一惊。我使用的是自动合成属性(但手动合成没有任何区别)


我可以在
TestA
的实现中很好地访问
\u foo
,但不能在
TestB
中访问。我可以通过将
id\u userInfo
作为ivar声明放在
TestA.h
中来解决这个问题,但我不认为我必须这样做。这里发生了什么?

范围。似乎自动生成的IVAR在默认情况下是
@private
,而不是
@受保护的
。下面是一个为什么自动生成的IVAR是private的原因。这看起来确实是怎么回事,但仍然有点令人惊讶。我认为它会受到@protected保护,特别是因为我非常确定我看到苹果公司建议不要在WWDC会谈中使用init和release方法中的属性。由于
foo
存在于
TestA
,典型的方法是让
initWithFoo:
存在于
TestA
而不是
TestB
中。在
TestB
中添加它意味着一种有点奇怪的设计(因此得到一些奇怪的实现也就不足为奇了)
@interface TestA : NSObject
@property (strong) id foo;
@end

#import "TestA.h"
@interface TestB : TestA
- (id)initWithFoo:(id)foo;
@end

@implementation TestB
- (id)initWithFoo:(id)foo
{
    self = [super init];
    if (self)
    {
        _foo = foo; // Xcode says _foo is not defined.
        //self.foo = foo; // This does work though.
    }
    return self;
}
@end