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:
- what is awakeFromNib, there's no call to this method in the rest of the code, how was it triggered?
- 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 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).
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.