UIViewController ApplicationSequence UI-03
注意: NSLog(@"%s %d",__FUNCTION__,__LINE__); //打印程序方法的执行过程,
//__FUNCTION__,执行的方法名;__LINE__ 显示的NSlLoge方法在哪一行
1、UIApplication 应用程序类型,一个程序只需要一个UIApplication对象,一个工程只能制作一个应用程序
//应用程序正在进行加载的时候调用此方法,此方法的重要的作用,创建window对象,并将window设置主窗口且使其可见
//所以当你要在应用程序上显示其他的内容要把添加到此方法中
#pragma mark 应用程序开始加载状态
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
2、 #pragma mark 应用程序将要取消活跃状态
//触发的因素:来电、短信,退出应用程序,手动进入后台
//可以使用此方法暂停正在运行的任务,或者是让定时器暂停,或者暂停游戏
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%s %d",__FUNCTION__,__LINE__);
}
3、 #pragma mark 程序已经进入后台
//用这个方法可以用来释放共享资源,存储用户信息,使定时器无效,存储用户当前状态下的信息,已备下次恢复;
//如果你的应用程序支持后台运行,当用户退出的时候,这个方法将被替代applicationWillTerminate:
- (void)applicationDidEnterBackground:(UIApplication *)application {}
4、 #pragma mark 应用程序即将进入前台
//唤醒进入后台时的任务
- (void)applicationWillEnterForeground:(UIApplication *)application {}
5、 #pragma mark 应用程序已经处于活跃状态,应用程序已经在屏幕上运行了
//重启应用程序中没开启的任务或者程序程序进入后台时被暂停的任务开启,如果应用程序之前不再后台 也可以刷新一下用户界面(如网易新闻第二天打开不是第一天的新闻,已被刷新)
- (void)applicationDidBecomeActive:(UIApplication *)application {}
7、重点概念
main.m 程序的入口
#import
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
//UIApplicationMain(),此函数的三大功能
(面试必考题)
1.创建应用程序对象,每一个应用程序都是一个应用程序对象
2.创建事件死循环(runloop,死循环)用于及时处理用户的操作,时时刻刻检测屏幕上有没有用户交互事件,一旦用户进行了交互,立即对用户操作做出操作
3.设置应用程序的代理对象,用来检测应用程序运行状态
[A class] 如果类A调用Class方法,则返回类A
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}}
————————————————————————————————————————
8、UIViewController 继承自UIResponder ,是一个专门用来管理视图的一个类,只能用来管理单视图,是一个单是图控制器
//概念误区:视图管理器不是一个视图,是用来管理视图的,而且视图控制器自带一个管理视图的根视图
//UIViewController 主要作用:1.管理视图 2.响应事件 3.分担Appdelegate 的工作 4.可以实现MVC模式
——————————————————————————————
例子:
//创建自定义视图控制器对象
RootViewController *rootVC = [[RootViewController alloc]init];
//将rootVC制定window的根视图
self.window.rootViewController = rootVC;
新建一个根管理器的子视图控制器来重写方法
RootViewController.h 将其头文件引入AppDelegate.m文件
RootViewController.m
下面是几种方法实现:
//视图控制器的指定初始化方法,就是无论你调用哪个初始化方法初始化一个视图控制器对象,都会走的那个方法就叫做指定初始化方法
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
}
return self;
}
——————————————————————————————
1、加载发根视图的触发的方法
//如果要是重写了loadView方法,第一种必须是实现[super loadView]
//第二种自定义个视图赋值给视图控制器自身所带的视图View
- (void)loadView{
// [super loadView];//父类对该方法的实现是加载一个UIView对象,视图控制器自身所带的View就是由此方法创建出来的
//自定义视图控制器自身所带的视图View
UIView *newview = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.view = newview;
[newview release];
}
——————————————————————————————————
2、当发现View自身所带View为nil会再去调用loadView,直到发现view不再为nil就不再调用loadView方法
//当视图控制器自带的View加载完成时触发
- (void)viewDidLoad {
[super viewDidLoad];
//使用self.View访问自定义视图所带的View
self.view.backgroundColor = [UIColor greenColor];
//想添加的视图写在这个方法中
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];
[view release];
}
———————————————————————————————
3、当内存出现警告时自动调用此方法
//在这方法中需要释放掉暂时不适用的资源 调试是否执行此方法:
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"警告啦,警告啦,你TM的警告了!");
//[self isViewLoaded] 用来判断视图控制器自带的view是否已经加载
// self.view.window 查看根视图有没有在window上显示
if ([self isViewLoaded] && !self.view.window ) {
//安全的将根视图删除
self.view = nil;
}
}
———————————————————————————————————
4、当设备发生旋转时,当前界面不发生变化,就意味着不支持旋转
- (BOOL)shouldAutorotate{
return YES;
}
//设置界面设置的旋转方向
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;//三种旋转方式
}
//当旋转屏幕的时候触发,ios8之后才有效
//- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator{
// //size将要旋转到的屏幕的尺寸
// NSLog(@"%@",NSStringFromCGSize(size));
if (size.width < size.height) {
//把竖屏下的坐标赋值给空间
}else{
//把横屏下的坐标赋值给空间
}}
本节经典练习题: http://blog.sina.com.cn/s/blog_814ecfa90102vvcr.html
——————————————————————————————————————————
欢迎学习本文,未经博主允许,禁止转载!