gpt4 book ai didi

objective-c - 为什么没有对应ivar 的子类@property 会隐藏父类(super class)ivar?

转载 作者:技术小花猫 更新时间:2023-10-29 10:37:36 24 4
gpt4 key购买 nike

以下看起来很简单。有一个带有 ivar 的父类(super class),以及一个访问 (@protected) 父类(super class) 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 的东西,编译就OK了。似乎在子类中添加一个合成属性,而没有相应的 ivar,实际上是隐藏了一个不相关的父类(super class) ivar。

谁能告诉我这里发生了什么?相关地,编译错误是否可以预见? (预见到它会节省我一些时间和挫折感)。

最佳答案

LLVM毫无怨言地编译源码,切换到LLVM:选择target → Get Info → Build → C/C++ Compiler Version → LLVM 1.5。从我有限的经验来看,无论如何它是一个更好的编译器。不知道为什么 GCC 会这样 - 有趣的问题。

关于objective-c - 为什么没有对应ivar 的子类@property 会隐藏父类(super class)ivar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3957288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com