Explain awakeFromNib, initwithFrame usage

I am going through the Stanford iphone dev lectures on iTunes and ran into this in Lecture 5. We are trying to ensure a redraw will be done when the device rotates. I have two questions related to this:

  1. what is awakeFromNib, there's no call to this method in the rest of the code, how was it triggered?
  2. what does the codes inside initwithFrame do?

Thank you.

-(void)setup 
{
    self.contentMode =UIViewContentModeRedraw;
}
-(void)awakeFromNib {
  [self setup];
}

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

 

awakeFromNib is called by NSBundle when it finishes loading your nib. You've actually got two different code paths your code can take when initializing a view, depending on whether it's loaded from a nib or created at runtime. If it's loaded from a nib, part of the loading will initialize it by callinginitWithCoder:, followed by a later call of awakeFromNib after all the outlets have been connected. If you create the view programmatically, you initialize it with initWithFrame: instead (andawakeFromNib is never called because it wasn't loaded from a nib).

 

self is a pointer to the current object (it's implicitly defined for every non-static method). super lets you call the object's superclass's implementation of the current method. The self = [super init...] is a convention for how you invoke the superclass's initializer (since it can possibly return a different object). These are fundamental notions in Objective-C and object-oriented programming though, a fair bit beyond the scope of the original question.

 
posted @ 2013-05-03 01:05  cateatmycode  阅读(252)  评论(0编辑  收藏  举报