视图控制器特点
//1,抽象  视觉上没有效果
//2,负责控制视图的显示方式
//3,负责通知视图的显示内容
//4,ios平台赋予的,收到内存警告和检测设备旋转
@interface CHViewController : UIViewController
//@property(nonatomic,retain)UIView *view;
//当使用访问器访问该视图控制器的根视图时,如果该视图控制器的根视图为空(没有使用设置器进行赋值过..),那么该视图控制器对象会自动收到消息-loadView..[view loadView],否则会直接返回该视图控制器的根视图...;
@end


//新建的视图控制器一定是继承于UIViewController的,或者是他的子类...
//因为这是一个视图控制器
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    //一定要对super对象发送消息,目的是为了调用父类的实现方法
    if (self= [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])
    {
        //新建类的自定义初始化方法..
        self.title=@"haha";
    }
    //返回初始化结果
    return self;
}
-(void)dealloc
{
      mutableArray=nil;
    self.title=nil;
}
-(void)loadView
{
    NSLog(@"%s",__FUNCTION__);
    [super loadView];//父视图加载之后,view就不会是空了
    NSLog(@"%@",self.view);//如果view为空就会执行loadView.如果view为空就会陷入死循环
//[super loadView];
}
//根视图完成加载
- (void)viewDidLoad
{
     NSLog(@"%s",__FUNCTION__);
    [super viewDidLoad];
    mutableArray=[NSMutableArray new];
    // Do any additional setup after loading the view, typically from a nib.
}

//控制器实例对象收到内存警告...
//当控制器实例对象收到内存警告时,控制器实例对象会自动对自身的根视图赋值为空,相当于执行了self.view=nil;
- (void)didReceiveMemoryWarning//自动将根视图赋值为空,为了释放内存//但是特殊情况是视图正在显示的时候就不会赋值为空
{
     NSLog(@"%s",__FUNCTION__);
    [super didReceiveMemoryWarning];
     mutableArray =nil;
    // Dispose of any resources that can be recreated.
}
//////////////////////////以上为第一层循环

//以下为第二层循环
-(void)viewWillAppear:(BOOL)animated
{
    NSLog(@"----------%s",__FUNCTION__);
    [super viewWillAppear:animated];
}
-(void)viewDidAppear:(BOOL)animated
{
 NSLog(@"%s",__FUNCTION__);
    [super viewDidAppear:animated];
}
-(void)viewWillDisappear:(BOOL)animated
{
 NSLog(@"%s",__FUNCTION__);
    [super viewWillDisappear:animated];
}
-(void)viewDidDisappear:(BOOL)animated
{
 NSLog(@"%s",__FUNCTION__);
    [super viewDidDisappear:animated];
}
@end

视图功能:显示视图控制器通知它显示的内容,ios赋予它响应用户交互,承载动画

每个view都有一个tag属性.

[self.view viewWithtag:int];tag默认都为0.

UIWindow是self.view的父view.

多态就是多种状态