IOS中的一些输入点

时间:2015-06-06 12:44:53

标签: ios objective-c iphone

起初,对不起我的英语。我尝试用几个输入点解决问题(一些初始化器,如initWithFrame:和initWithCoder :)。不要重复我的设置代码。起初我有一个简单的解决方案,只需创建由初始化程序调用的方法(例如,#34; setup")。但是子类存在一些问题。如果我的子类有自己的初始化器,如initWithFrame:backgroundColor:和property" backgroundColor"那么它自己的覆盖"设置"将由超级初始化器调用,但" backgroundColor"仍然没有。所以这个"设置"将无法使用此属性。我认为它的常见问题和它有很好的共同解决方案,我找不到。谢谢。

2 个答案:

答案 0 :(得分:2)

通常,我会创建一个名为_commonInit(MyClass *self)的静态函数,并从每个初始化程序中调用它。这是一个功能,因为它不会被继承。

答案 1 :(得分:0)

基类

-(instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        [self setup];
    }
    return self;
}

-(instancetype)initWithCoder:(NSCoder*)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
       [self setup];
    }
    return self;
}

-(void)setup
{
   //some setup code
}

儿童班

-(instancetype)initWithFrame:(CGRect)frame param:(id)param
{
    self = [super initWithFrame:frame];
    if(self)
    {
       self.param = param;
       //setup will be run by parent
    }
    return self;
}

-(void)setup
{
    [super setup];
    //child setup code
    //when this code will work self.param will still nil!
}

这就是我的意思