0

Super class Resource

@interface Resource : CoderObject

@property (strong, nonatomic) NSString *resourceID;
@property (assign, nonatomic) ResourceType resourceType;
@property (assign, nonatomic) DataType dataType;

@end

Subclass ViewResource

@interface ViewResource : Resource

@property (strong, nonatomic) CustomView *view;
@property (strong, nonatomic) UIViewController *viewController;

@end

In subclass ViewResource's init method how to access Resource's variable dataType? Now I'm trying to just use super.dataType = ...

Is there other ways?

4

2 回答 2

2

你只需要使用self.dataType. 您的子类对 .h 文件中定义的所有超类属性具有完全可见性。Usingself.xxx还使您能够在将来需要时覆盖访问器方法,而无需返回编辑所有使用代码。

看看你下面的链接,很公平。这些都是有效的观点。访问器不应该有副作用,但你不能保证它们不会。如果该属性被定义为超类,那么您有几个选择:

  1. 用于self.xxx设置属性并努力确保没有副作用
  2. 在 super 上调用一个 init 方法,传递所需的参数,并将它们设置在那里
于 2013-05-18T09:39:43.117 回答
0

就像韦恩在他的回答中所说的那样,您可以直接访问您的超级班级成员(如果他们不是私人的)。

self.property只要你的init看起来像这样,调用init方法就没有问题

-(id)initAndTheNameYoWantAndMaybeSomeParameters:(NSString *)paramExample {
    self = [super initNameOfAnInitMethodFromSuperClass];
    //check if the init was with success
    if(self != nil) {
       self.myStringProp = paramExample;
       //or
       self.propertyFromSuper = paramExample;
    }
}

是的,你也可以在 initMethods 中做一些愚蠢的事情(我之前做过:))),比如从它内部调用相同的 initMethod,它会生成一个递归调用,导致我的应用程序崩溃。(很容易发现这个问题)

于 2013-05-18T10:08:30.567 回答