在初始化程序中设置超级 class 中定义的属性

Setting properties defined in a super class in the initialiser

据我了解,在 init 中设置值的一般经验法则是直接使用 ivars。

例如

@interface CustomClass

@property (nonatomic, strong) NSString *name;

@end

然后:

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

    return self;
}

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

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

    return self;
}

我相信你在那里所做的一切都很好。此时调用super.init后,self存在,可以使用(你调用的也是return self,为什么其他引用self会出错?)。