【问题标题】:Setting properties defined in a super class in the initialiser在初始化程序中设置超类中定义的属性
【发布时间】:2018-06-25 08:28:57
【问题描述】:

据我所知,在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;
}

【问题讨论】:

  • 我想你在那里做的很好。
  • 您别无选择。你不能直接访问_background(如果基类中有这样的ivar)。
  • 顺便说一句,您可能想使用(nonatomic,copy) 而不是(nonatomic,strong),您的类应该拥有 name,而不是指向它。

标签: ios objective-c initializer


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2012-06-26
    • 2015-06-18
    • 1970-01-01
    • 2019-05-16
    • 2012-12-15
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多