以下看起来很简单。有与伊娃超类和子类,可以访问(@protected)超伊娃:为什么没有相应的ivar hide superclass ivars的子类@property?
// Testclass.h
@interface TestClass : NSObject {
NSString *testIvar;
}
@end
//TestClass.m
@implementation TestClass
@end
//TestSubclass.h
@interface TestSubClass : TestClass {
}
@property (nonatomic, retain) NSString *testProperty;
- (void) testMethod;
@end
//TestSubclass.m
#import "TestSubClass.h"
@implementation TestSubClass
@synthesize testProperty;
- (void) testMethod{
NSLog(@"The value was: %@", testIvar);
}
@end
简单而正确的,似乎不够。但是,尝试编译(对于iOS 4.2 SDK,使用GCC 4.2)会产生指向NSLog行的错误:'testIvar undeclared'。
我是新来的Objective-C,但不能为我的生活为什么这应该是一个错误。注释掉testProperty的东西,并编译好。看起来像在一个子类中添加一个综合属性,没有相应的伊娃,实际上是隐藏了一个不相关的超级伊娃。
任何人都可以启发我这里发生了什么?相关的,编译错误是否可预见? (预见它会为我节省一些时间和挫败感)。
谢谢。无论如何,一直有意要尝试LLVM,所以这里就是这个场合。我已经标记了你提出的修复建议,大概只有GNU和/或Apple开发人员会知道真实原因。 – Cris 2010-10-18 20:52:16
我遇到了同样的问题。奇怪的。 LLVM ftw – logancautrell 2011-02-25 16:33:29
也出现同样的问题。从未使用LLVM,发现它更好 – edo42 2011-08-11 16:01:14