Ar4ibald
Ar4ibald

Reputation: 3

A few enter points in IOS

At first, sorry for my english. I trying to resolve problem with a few enter points (a few initializators like initWithFrame: and initWithCoder:). Not to repeat my setup code. At first i had a simple solution, just create method ("setup" for example) that called by initializators. But there is a little problem with subclasses. If my subclass have own initializator like initWithFrame:backgroundColor: and property "backgroundColor" then its own overriden "setup" will be called by super initializator but "backgroundColor" will still nil. So this "setup" will cant use this property. I think its common problem and its have nice common solution, that i cant find.Thanks.

Upvotes: 0

Views: 159

Answers (2)

Ar4ibald
Ar4ibald

Reputation: 3

base class

-(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
}

child class

-(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!
}

thats what i mean

Upvotes: 0

bbum
bbum

Reputation: 162722

Typically, I'll create static function called _commonInit(MyClass *self) and call that from each initializer. It is a function because it won't be inherited.

Upvotes: 2

Related Questions