1.There is a class called NSNotificationCenter .It has a class method called defaultCenter.That returns a shared instance kind of like NSUserDefault,standard UserDefault did — a shared instance.That’s the object you use to tune into radio stations. And you do it by sending it is this message:addObserver selector name object.The first argument observe,that is,the object that wants to listen to the radio station.So in your controller — because controllers are the most common radio station listeners — this would probably just be self.This is somewhere in your controller code.Selector is the method inside of the observer that you want to be called when something appears on the radio station.Some broadcast happens.Name is the name of the radio station.And sender there — object sender —that’s if you only want to listen to radio station broadcasts that come from a certain other object.Often you pass nil here which means if anyone broadcasts on that frequency,i want to hear it.(53:00)
2.So another thing to understand is when you’re done listening,tune out.And you do that by sending a message to the notification center saying”removeObserver”.And you can remove yourself as an observer of all radio station with the first one or you can just remove yourself from listening to certain radio stations,by specifying the name of the radio station and who the sender is you don’t want to listen to anymore.It’s important to do this because,unfortunately,the notification center keeps a pointer to you that is called”Unsafe retained”.So it’s not strong or weak;it’s unsafe retained. And what unsafe retained means is that if you go out of the heap without calling this first,the notification center might try and send you a notification and crash your app.(57:00)
3.UITextView:Like UILabel,but multi-line,selectable/editabel,scrollable,etc.Set its text and attributes via its NSMutableAttributedString.Obtain the NSMutableAttributedString representing the text in the UITextView using…
@property(nonatomic,readonly)NSTextStorage *textStorage;NSTextStorage is a subclass of NSMutableAttributedString.
4.The start of the lifecycle is creation.MVCs are most often instantiated out of a storyboard.What then?
Outlet setting — Appearing and disappearing — Geometry changes — Low-memory situations.
5.After instantiation and outlet-setting,viewDidLoad is called.This is an exceptionally good place to put a lot of setup code.But be careful because the geometry of your view is not set yet!At this point,you can’t be sure you’re on an iPhone 5-sized screen or an iPad or???So do not initialize things that are geometry-dependent here.
6.Just before the view appears on screen,you get notified(argument is just whether you are appearing instantly or over time via animation)
-(void)viewWillAppear:(BOOL)animated;
Your view will only get “loaded” once,but it might appear and disappear a lot.So don’t put something in this method that really wants to be in viewDidLoad.Otherwise,you might be doing something over and over unnecessarily.
Do something here if things you display are changing while your MVC is off-screen.View’s geometry is set here,but there are other(better?)places to react to geometry.
7.And you get notified when you will disappear off screen too.This is where you put “remember what’s going on” and cleanup code.
-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated];//call super in all the viewWill/Did.. methods //let’s be nice to the user and remember the scroll position they were at [self rememberScrollPosition]; //do some other clean up now that we’ve been removed from screen [self saveDataToPermanentStore]; //but be careful not to do anything time-consuming here,or app will be sluggish }
There are “did” versions of both of the appearance methods
-(void)viewDidAppear:(BOOL)animated; -(void)viewDidDisappear:(BOOL)animated;
8.In low-memory situations,didReceiveMemoryWaring gets called…Anything “big” that can be recreated should probably be released(i.e. set strong pointer to nil).
9.Notifications:The “radio station”from the MVC slides.
NSNotificationCenter:Get the default”notification center”via[NSNotificationCenter defaultCenter]
Then send it the following message if you want to “listen to a radio station”:
-(void)addObserver:(id)observer //you(the object to get notified) selector:(SEL)methodToInvokeIfSomethingHappens name:(NSString *)name //name of station(a constant somewhere) object:(id)sender;//whose changes you’re instertsted in(nil is anyone‘s) //You will then be notified when there are broadcasts -(void)methodToInvokeIfSomethingHappens:(NSNotification *)notification{ notification.name //the name passed above notification.object //the object sending you the notification notification.userInfo //notification-specific information about what happened }
10.Be sure to “tune out”when done listening
[center removeObserver:self];or
[center removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil];
Failure to remove yourself can sometimes result in crashers.
This is because the NSNotificationCenter keeps an “unsafe retained”pointer to you.
A good place to remove yourself is when your MVC’s View goes off screen.
Or you can remove yourself in a method called dealloc(called when you leave the heap)
-(void)dealloc{
//be careful in this method!can’t access properties!you are almost gone from heap/
[[NSNotificationCenter defaultCenter]removeObserver:self];
}