[英]Use of @synthesize/@property in Objective-C inheritance
如果A类的实例var“foo”具有@ property / @ synthesize指令,而B类继承自A类,它是否还需要@ property / @ synthesize“foo”? 我问的原因是因为当我尝试使用B类的“foo”时,调用类说“foo”不是结构化联合或成员的东西,这让我相信它需要明确合成。
不,你没有。 合成属性会自动添加到A类及其子类中。
如果A类的实例var“foo”具有@ property / @ synthesize指令,而B类继承自A类,它是否还需要@ property / @ synthesize“foo”?
没有。
我问的原因是因为当我尝试使用B级的“foo”时,调用类说...
不,编译器说的。
......“foo”不是结构化联盟或成员,这让我相信它需要明确合成。
它是。 在A班
编译器给你这个警告,因为它不知道@property,这是因为你既没有声明它也没有导入声明它的头。 你说类A的头部声明了属性,所以将类A的头部导入到B类的实现中,以便编译器在编译B类时知道该属性。
以防这有助于某人。
我也遇到了这个问题并阅读了这些答案,仍然无法直接访问超类变量。 它们被声明为属性并在超类中合成,并且我已将标头导入到我的子类中。 我被困住了,直到我发现我需要在超类中的@interface部分声明成员变量以及超类的属性.... 例如
@interface BuoyAnnotation : NSObject <MKAnnotation>
{
CLLocationCoordinate2D coordinate;
CLLocation* location;
int type;
}
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) CLLocation* location;
@property (nonatomic, assign) int type;
继承你的时候不需要重新声明任何属性或变量。
也许如果你发布你的ClassB头文件或一部分人,可以更好地查明你的问题。
更正,你只需在典型的成员变量声明大括号之外声明一个@property,然后@synthesize .m文件中的属性。 我注意到在子类中你使用self.propertyName来引用它,但是在父类中你可以使用即时变量名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.