文件标签:控制器,生命周期,ios,self,IOS,调用,animated,void,view From: https://blog.51cto.com/u_15907570/5925321
#import “OneAppDelegate.h"
#import “OneViewController.h"
@implementation
- (void)dealloc
{
_windowrelease];
[_viewControllerrelease];
superdealloc];
}
#pragma mark 在应用程序启动完毕的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
{
//在这里隐藏状态栏,会让程序全屏显示
// application.statusBarHidden = YES;
// 初始化一个窗口
self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]autorelease];
//初始化一个控制器
// OneViewController.xib
// bundle:可以理解为是文件夹,传入nil代表着项目文件夹
// 如果nibName为nil,默认会去加载与控制器同名的xib文件
// self.viewController = [[[OneViewController alloc] initWithNibName:@“OneViewController123" bundle:nil] autorelease];
//调用init方法创建控制器的时候,它会默认加载与控制器同名的xib文件
//如果找不到对应的xib文件,就会默认创建一个空的UIView,默认背景颜色是黑色
//实际上,创建好控制器之后,并不会去马上初始化内部的view
//因为控制器内部的view是延迟加载的,用到时再加载
self.viewController = [[[OneViewControlleralloc] init] autorelease];
//只要你访问了控制器的view,才会开始创建它内部的view
//所以下面这句代码会导致初始化控制器的view,而且创建完毕后会调用控制器的viewDidLoad方法
//UIView *view = self.viewController.view;
//设置窗口的根控制器
self.window.rootViewController =self.viewController;
//最好设置窗口的根控制器,不要直接添加控制器的view到窗口中
//因为控制器还要接收一些窗口传递过来的系统事件,比如屏幕旋转
// [self.window addSubview:self.viewController.view];
// 让window显示出来,并且成为主窗口
// 窗口显示出来后就会将根控制器的View到UIWindow中
[self.windowmakeKeyAndVisible];
return YES;
}
文件
#import “OneViewController.h"
@interface OneViewController ()
@end
@implementation
- (void)click {
UIApplication *app = [UIApplicationsharedApplication];
//设置应用程序图标上的红色数字
app.applicationIconBadgeNumber =5;
// 隐藏状态栏
// app.statusBarHidden = YES;
// 显示联网状态
//如果已经显示,就隐藏;如果已经隐藏,就显示
//这里只是显示一个状态而已,并没有表示我们的程序真的在联网
app.networkActivityIndicatorVisible = !app.isNetworkActivityIndicatorVisible;
}
这个方法是用来加载内部的view
// 父类的loadView内部是这样实现的:如果有跟控制器相关联的xib文件,就会通过xib文件创建内部的view,如果没有,就会创建一个空白的view(默认背景颜色是黑色)
// 苹果设计这个方法的目的就是给我们自定义控制器内部的view
// 如果我们需要自定义控制器的view,就不需要调用父类的loadView方法
- (void)loadView {
// [super loadView];
// iPhone坐标系是320 x 480(点坐标系)
// 获取屏幕的尺寸
CGRect bounds = [UIScreenmainScreen].bounds;
// 屏幕的宽度
CGFloat width = bounds.size.width;
// 屏幕的高度
CGFloat height = bounds.size.height;
// CGRect frame = CGRectMake(0, 20, width, height - 20);
// applicationFrame就是控制器内部view默认的frame
// {x=0, y=20, width=320, height=460}
CGRect frame = [UIScreenmainScreen].applicationFrame;
NSLog(@"%@",NSStringFromCGRect(frame));
// 通过代码初始化我们的view
self.view = [[[UIViewalloc] initWithFrame:frame]autorelease];
// 设置view的背景颜色为红色
self.view.backgroundColor = [UIColorredColor];
}
当内部的view加载完毕之后就会调用
// 一般会在这里添加一些子视图、渲染数据
// 无论是通过xib还是代码创建view,总之view创建完毕后就会调用这个方法
- (void)viewDidLoad
{
[superviewDidLoad];
NSLog(@"viewDidLoad,view被加载完毕");
}
#pragma mark 当内部的view因为内存警告而被系统自动回收的时候调用
- (void)viewDidUnload {
[superviewDidUnload];
}
#pragma mark 当内部的view被添加到视图层次结构(也就是被添加到窗口中时)中就会调用
// 如果是重写生命周期方法,一定要调用回父类的方法
- (void)viewDidAppear:(BOOL)animated {
superviewDidAppear:animated];
NSLog(@"viewDidAppear,控制器的view被添加到屏幕");
}
#pragma mark 当内部的view从视图层次结构(也就是从窗口中移除时)中移除就会调用
- (void)viewDidDisappear:(BOOL)animated {
superviewDidDisappear:animated];
}
当内部的view即将被添加到屏幕的时候调用
- (void)viewWillAppear:(BOOL)animated {
superviewWillAppear:animated];
NSLog(@"viewWillAppear,view即将被添加到窗口中");
}
当内部的view即将从屏幕中移除的时候调用
- (void)viewWillDisappear:(BOOL)animated {
superviewWillDisappear:animated];
}
接收到内存警告
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
//一般会在这里回收内存
}
@end