Следующее кажется достаточно простым.Есть суперкласс с 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, и он скомпилируется.Кажется, что добавление синтезированного свойства в подкласс, без соответствующего ивара, на самом деле скрывает несвязанный суперкласс ивара.
Может кто-нибудь просветить меня относительно того, что здесь происходит?Соответственно, была ли ошибка компиляции предсказуемой?(Предвидеть это спасло бы меня некоторое время и разочарование).