UIWindow
2016-07-26 14:45
453 查看
#import "AppDelegate.h"
@interface
AppDelegate ()
@end
@implementation AppDelegate
// 加载info.plist,并且做判断,判断完没有main,就不会帮你创建窗口,自己手动创建
// 程序启动完成的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 窗口显示注意点:1.不要让窗口销毁,需要弄一个强引用
2.必须要设置窗口的尺寸
// 1.创建窗口的对象
self.window = [[UIWindowalloc]initWithFrame:[UIScreenmainScreen].bounds];
self.window.backgroundColor = [UIColorredColor];
// 2.创建窗口的跟控制器,并且赋值
// 苹果推荐使用控制器的原因,对应界面的事情交给对应的控制器去管理
UIViewController *rootVc = [[UIViewControlleralloc]init];
rootVc.view.backgroundColor = [UIColorgreenColor];
// 一旦设置窗口的根控制器,就会把根控制器的view添加到窗口
//
做了旋转功能
self.window.rootViewController = rootVc;
// UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
// btn.center = CGPointMake(50, 50);
// [rootVc.view addSubview:btn];
// [self.window addSubview:rootVc.view];
// 3.显示窗口
// 1.可以显示窗口 self.window.hidden = NO;
// 2.成为应用程序的主窗口 application.keyWindow = self.window;
[self.window makeKeyAndVisible];
//
// NSLog(@"%@",self.window);
return
YES;
}
// loadView作用:加载控制器的view
// loadView什么调用:当控制器的view第一次使用的时候就会调用
// 在开发中没有在loadView中调用[super loadView]
// 开发中什么情况使用:只要想自定义控制器的view就调用这个方法
// 底层做的事情.首先判断下有没有指定storyboard或者xib,如果指定,就会加载它们描述的控制器的view,如果没有指定,创建一个空的view.
// 控制器view的生命周期方法
// ARC:
// viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear
内存警告传递过程:手机内存不足产生事件->通知应用程序->调用应用程序代理方法->把事件传递给窗口->窗口传给控制器->调用控制器内存警告的方法。
> 当控制器接收内容警告,会销毁没有显示的控制器的view。(图片演示)
////////////////
// 存储
- (IBAction)save:(id)sender {
// plist存储本质,就是帮你生成一个Plist文件
//
谁才能做Plist,(数组,字典)
// plist文件注意点:plist文件不能存储自定义对象
Person *p = [[Personalloc]
init];
NSArray *arr =
@[@"123",@1];
// File:文件的全路径
// 1.先明确文件存储到哪,应用沙盒的某个文件夹中
// 获取应用沙盒路径
// NSString *homePath = NSHomeDirectory();
// NSLog(@"%@",homePath);
//
获取Caches文件夹路径
// directory:搜索文件夹
// domainMask:在哪个范围内搜索 NSUserDomainMask:在用户中查找
// expandTilde: YES :在路径展开 NO:不展开路径 ~:代替沙盒路径
NSString *cachesPath =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,
YES)[0];
//
拼接文件名
NSString *filePath = [cachesPath
stringByAppendingPathComponent:@"arr.plist"];
[arr writeToFile:filePath
atomically:YES];
}
// 读取
- (IBAction)read:(id)sender {
NSString *cachesPath =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,
YES)[0];
//
拼接文件名
NSString *filePath = [cachesPath
stringByAppendingPathComponent:@"arr.plist"];
// 读取:以什么形式存储就以什么形式读取
NSArray *arr = [NSArrayarrayWithContentsOfFile:filePath];
NSLog(@"%@",arr);
}
@interface
AppDelegate ()
@end
@implementation AppDelegate
// 加载info.plist,并且做判断,判断完没有main,就不会帮你创建窗口,自己手动创建
// 程序启动完成的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 窗口显示注意点:1.不要让窗口销毁,需要弄一个强引用
2.必须要设置窗口的尺寸
// 1.创建窗口的对象
self.window = [[UIWindowalloc]initWithFrame:[UIScreenmainScreen].bounds];
self.window.backgroundColor = [UIColorredColor];
// 2.创建窗口的跟控制器,并且赋值
// 苹果推荐使用控制器的原因,对应界面的事情交给对应的控制器去管理
UIViewController *rootVc = [[UIViewControlleralloc]init];
rootVc.view.backgroundColor = [UIColorgreenColor];
// 一旦设置窗口的根控制器,就会把根控制器的view添加到窗口
//
做了旋转功能
self.window.rootViewController = rootVc;
// UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
// btn.center = CGPointMake(50, 50);
// [rootVc.view addSubview:btn];
// [self.window addSubview:rootVc.view];
// 3.显示窗口
// 1.可以显示窗口 self.window.hidden = NO;
// 2.成为应用程序的主窗口 application.keyWindow = self.window;
[self.window makeKeyAndVisible];
//
// NSLog(@"%@",self.window);
return
YES;
}
// loadView作用:加载控制器的view
// loadView什么调用:当控制器的view第一次使用的时候就会调用
// 在开发中没有在loadView中调用[super loadView]
// 开发中什么情况使用:只要想自定义控制器的view就调用这个方法
// 底层做的事情.首先判断下有没有指定storyboard或者xib,如果指定,就会加载它们描述的控制器的view,如果没有指定,创建一个空的view.
// 控制器view的生命周期方法
// ARC:
// viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear
内存警告传递过程:手机内存不足产生事件->通知应用程序->调用应用程序代理方法->把事件传递给窗口->窗口传给控制器->调用控制器内存警告的方法。
> 当控制器接收内容警告,会销毁没有显示的控制器的view。(图片演示)
////////////////
// 存储
- (IBAction)save:(id)sender {
// plist存储本质,就是帮你生成一个Plist文件
//
谁才能做Plist,(数组,字典)
// plist文件注意点:plist文件不能存储自定义对象
Person *p = [[Personalloc]
init];
NSArray *arr =
@[@"123",@1];
// File:文件的全路径
// 1.先明确文件存储到哪,应用沙盒的某个文件夹中
// 获取应用沙盒路径
// NSString *homePath = NSHomeDirectory();
// NSLog(@"%@",homePath);
//
获取Caches文件夹路径
// directory:搜索文件夹
// domainMask:在哪个范围内搜索 NSUserDomainMask:在用户中查找
// expandTilde: YES :在路径展开 NO:不展开路径 ~:代替沙盒路径
NSString *cachesPath =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,
YES)[0];
//
拼接文件名
NSString *filePath = [cachesPath
stringByAppendingPathComponent:@"arr.plist"];
[arr writeToFile:filePath
atomically:YES];
}
// 读取
- (IBAction)read:(id)sender {
NSString *cachesPath =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,
YES)[0];
//
拼接文件名
NSString *filePath = [cachesPath
stringByAppendingPathComponent:@"arr.plist"];
// 读取:以什么形式存储就以什么形式读取
NSArray *arr = [NSArrayarrayWithContentsOfFile:filePath];
NSLog(@"%@",arr);
}
相关文章推荐
- lintcode longest-increasing-continuous-subsequence 最长上升连续子序列
- 使用Qt Quick Controls.Material 2.0 + 简单配色
- UE4导出指定Map
- Hbuilder系列索引
- iOS开发 UITableView 常用细节
- pt-quey-digest分析mysql 5.7 慢日志
- dp和sp
- vue.js 总结
- 运行Maven是报错:No goals have been specified for this build
- Hibernate中inverse="true"
- UI基础知识点,限制UItable的宽度和文字超出距离格式
- ueditor-百度可视化编辑器简单使用方法
- ie7easyui的书写要规范
- Merge Query
- Windows7 64位安装Requests
- 双目测距(六)--三维重建及UI显示
- self.edgesForExtendedLayout=UIRectEdgeBottom;
- controller中request变量的用法
- webpack: require.ensure与require AMD的区别
- HDU 5749 Colmerauer(单调栈或单调队列求解固定区间最大或最小值)