【发布时间】:2010-10-18 07:38:01
【问题描述】:
以下内容似乎很简单。有一个带有 ivar 的超类,以及一个访问(@protected)超类 ivar 的子类:
// 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 的东西,它就可以编译了。看起来像在子类中添加一个综合属性,没有对应的 ivar,实际上隐藏了一个不相关的超类 ivar。
谁能告诉我这里发生了什么?与此相关的是,编译错误是否可以预见? (预见到它会为我节省一些时间和挫败感)。
【问题讨论】:
标签: objective-c ios ios4