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 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.