I have a nib-based table view cell which I created in Interface builder. I set the class of the table view cell to FooTableViewCell
which extends from UITableViewCell
.
In FooTableViewCell
I override the init method like this:
-(id)init{
if ((self = [super init])){
// My init code here
}
return self;
}
I now expected that my gets called, when it is being instantiated. However the table view gets displayed but the method is never called.
I could work around this but I would like to fully understand it and for me it's not clear how an object can come to live without the init
method being called.
When being unarchived initialization goes through a slightly different path.
Instead of -(id)init
being called -(id)initWithCoder:(NSCoder*)aDecoder
will be called. At this point outlets aren't hooked up, if you need access to the outlets you can override -(void)awakeFromNib
which will be called after the object has been hooked up.
When object is being loaded from nib file then its -awakeFromNib method is called - you can put your initialisation code there:
- (void)awakeFromNib{
// Init code
}
来源:https://stackoverflow.com/questions/6942152/why-does-the-init-method-of-a-custom-nib-based-table-cell-not-get-called