【发布时间】: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