8

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?

.

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

-(void)awakeFromNib
{
    [self setup];
}

-(id)initWithFrame:(CGRect)frame
{
     self=[super initWithFrame:frame];
     if (self) {
        [self setup];
     }
     return self;
}
pkamb
  • 33,281
  • 23
  • 160
  • 191
William Sham
  • 12,849
  • 11
  • 50
  • 67
  • 1
    This question has some answers over at Quora: [What exactly happens when a view (or subview) is loaded from a nib?](http://www.quora.com/Cocoa-API/What-exactly-happens-when-a-view-or-subview-is-loaded-from-a-nib) and [What is the difference between initWithCoder:, initWithNibName:, and awakeFromNib?](http://www.quora.com/Cocoa-API/What-is-the-difference-between-initWithCoder-initWithNibName-and-awakeFromNib). – Lily Ballard Dec 09 '11 at 21:31

2 Answers2

24

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 calling initWithCoder:, 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 (and awakeFromNib is never called because it wasn't loaded from a nib).

pkamb
  • 33,281
  • 23
  • 160
  • 191
Tony
  • 3,470
  • 1
  • 18
  • 23
  • Thanks. I'm now clear about the awakeFromNib. What about the self=... What is self? What is super? And whose super are we getting here? – William Sham Dec 10 '11 at 02:22
  • 1
    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. – Tony Dec 19 '11 at 15:27
0

Firstly, initWitFrame will initialize what ever you using with a given rectangular space CGRect is the coordinate position. Read on CGRectMake. The basic idea is CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

for the second half of you question check this

Community
  • 1
  • 1
StackFlowed
  • 6,664
  • 1
  • 29
  • 45