您的位置:首页 > 其它

I have a custom view that I want to be able to initialize both in-code and in nib.

2014-12-04 11:16 561 查看


Objective
C - Custom view and implementing init method?

http://stackoverflow.com/questions/7226239/objective-c-custom-view-and-implementing-init-method






up
vote16down
votefavorite

15

I have a custom view that I want to be able to initialize both 
in-code
 and
in 
nib
.

What's the correct way to write both 
initWithFrame
 and 
initWithCoder
 methods?
They both share a block of code that is used for some initialization.

objective-c initwithframe initwithcoder
share|improve
this question
asked Aug 29 '11 at 5:00





aryaxt
16.1k41159283

 add
a comment


3 Answers

activeoldestvotes

up
vote30down
voteaccepted
The right thing to do in that case is to create another method containing the code that's common to both 
-initWithFrame:
 and 
-initWithCoder:
,
and then call that method from both 
-initWithFrame:
 and 
-initWithCoder:
:
- (void)commonInit
{
// do any initialization that's common to both -initWithFrame:
// and -initWithCoder: in this method
}

- (id)initWithFrame:(CGRect)aRect
{
if ((self = [super initWithFrame:aRect])) {
[self commonInit];
}
return self;
}

- (id)initWithCoder:(NSCoder*)coder
{
if ((self = [super initWithCoder:coder])) {
[self commonInit];
}
return self;
}


Do heed the concerns outlined in Justin's answer, particularly that any subclasses must not override 
-commonInit
.
I used that name here for its illustrative value, but you'll probably want one that's more closely tied to your class and less likely to be accidentally overridden. If you're creating a purpose-built UIView subclass that's unlikely to be subclassed itself,
using a common initialization method as above is perfectly fine. If you're writing a framework for others to use, or if you don't understand the issue but want to do the safest possible thing, use a static function instead.

share|improve
this answer
edited Aug
29 '11 at 21:54

answered Aug 29 '11 at 5:37

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐