在初始化器中设置超类中定义的属性



根据我所学到的知识,在init中设置值的一般经验法则是直接使用 ivars 的问题。

例如

@interface CustomClass
@property (nonatomic, strong) NSString *name;
@end

然后:

- (instancetype)initWithName:(NSString *)name
{
    if (self = [super init]) {
        _name = name;
    }
    return self;
}

现在到目前为止一切顺利。我对一个稍微不同的案例感兴趣。假设您正在对 UIView 进行子类化,并且在初始化器中要为该子类分配背景颜色。此处,属性backgroundColor在父类中定义。我的问题是:在初始化器中使用self是错误的风格还是潜在的错误?在其他地方设置背景颜色会更好吗?

- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = [UIColor greenColor];
    }
    return self;
}
我相信

你在那里做什么是完全没问题的。此时,在调用super.init之后,self存在,您可以使用它(您也在调用return self,那么为什么其他对self的引用是错误的呢?

最新更新