14 - XML、JSON、PLIST对比和APP生命周期
XML中间的 数据表达/传输数据的语言
优点:特别强大 强大到很多平台都有基于XML的独立语言,如MXML、HTML
缺点:传输小型数据时,特别啰嗦
size / speed = time
JSON JavaScript Object
传小型数据时使用
是什么?中间的 用于表达/传输数据的语言
比XML更小型、更轻量
JSON语法
用于表达结构的
{ } 用于表达字典
[ ] 用于表达数组
<><><><><><><><><><><><><><><><><><><>
用于表达内存
"" 表达字符串
23 表达一个数字
true false 表达一个布尔
null 表达空
翻译练习
[
{"user" : "苹果汇",
"content" : "iPhone6a的谍照已经被发布",
"date" : "2012/2/23 8:25:21",
"lockToTop" : false
},
{"user" : "apple官方",
"content" : "我什么都没说",
"date" : "2012/2/23 8:28:21",
"lockToTop" : false
}
]
JSON和XML的对比
JSON XML
更轻量 更高功能
文件小 文件大
更关注内容 更加完整的描述结构
传输数据 能干更多其他事情
JSON与XML的使用
1)旧项目支持ios系统
基本使用XML
旧项目很有可能通信已经使用WebService
2)中小型项目ios/android先开展的
一上来很有可能采用JSON
3)特殊情况
XML里嵌套JSON
<menu data="{‘title‘=‘Open‘,‘arthority‘=‘2‘}"></menu>
JSON在ios下的解析
1)NSJSONServ...
NSArray/NSDictionary <-> JSON String
练习:
把JSON转换为实体对象
[
{
"name" : "三桑",
"age" : 8,
"phoneNumber" : "911"
},
{
"name" : "安卓",
"age" : 10,
"phoneNumber" : "912"
}
]
Person类
新浪微博API
open.weibo.com -> 文档 -> 微博API -> 微博接口 -> statues/home_timeline
JSON与Plist区别
JSON Plist
跨语言跨平台 苹果平台自己使用
JSON写的 XML写的
用于数据传输(C/S) 用于轻量存储/应用配置
<><><><><><><><><><><><><><><><><><>
应用程序的生命周期
1)对象的生命周期
init dealloc ...
2)ViewController的生命周期
viewDidLoad
viewWillAppear...
3)View的生命周期
drawRect:
layoutSubviews:
4)应用程序的生命周期
application:didFinishLaunchingWithOptions:
应用程序生命周期干什么?
负责在应用程序发生一些事件时,调用相关消息
事件 <-> 应用程序状态的改变
应用程序的状态
在文档中搜索ios app programming
由操作系统导致的闹铃,购买等状况,应用程序会进入非活动状态Inactive
1)Not runing非运行态(没打开)
2)Inactive非活动态(暂停)
从属于前台
active->inactive停留在非活动态
程序被暂停,程序依然能被使用者看见,
情况1
程序中央有一个巨大的操作系统级别的对话框,
比如一个闹铃、一个购买提示、通知(特指用户设置在中央显示的通知)、
//通知有三种样式:状态栏、中央、不显示
情况2
用户点击两下home键
经过inactive
Not running / active / background 互相切换
active活动态(运行时)
从属于前台,应用程序在运行
background后台态(被关了)
用户并没有操作你当前程序
你的程序可以申请10分钟后台执行代码
Suspended挂起态
你的程序即将被销毁(从内存中移除)
【APP_Lifecycle】
#import "MXAppDelegate.h"
@implementation MXAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// 非运行态->非活动态(打开时)
// 干什么:
// 配置模型 初始化模型
// 配置第三方框架信息
// 如果没有使用storyboard就要初始化rootViewController
// * 应用间通信
// * 处理通知
NSLog(@"didFinishLaunchingWithOptions");
returnYES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
// 活动态 -> 非活动态(暂停)
// 干什么:
// 暂停游戏
// 暂停各种Timer
NSLog(@"applicationWillResignActive");
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// 非活动态 -> 后台态(被关闭)
// 干什么:
// 释放各种资源
// 各种收场 (申请后台操作)如当前要下载多个文件,赶快下载最后一个文件,其他就不下载了
// 提示服务器 (申请后台操作)如用户当前不在线
// 保存文件
// 如果进行后台操作的申请
// 1.向操作系统请求后台运行,并获取后台运行任务码
self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ // Expiration过期
// 在后台运行任务到期时运行这个代码块
// 4.处理在时间结束后,后台任务仍然没有做完的情况
[application endBackgroundTask:self.backgroundTaskIdentifier];
NSLog(@"applicationDidEnterBackground");
}];
// 2.使用另外一个线程,执行后台运行代码
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 0 这个参数没有用
dispatch_async(queue, ^{
// 后台运行的代码写在这
for (int i = 0; i < 1000; i++) {
NSLog(@"%d", i);
[NSThreadsleepForTimeInterval:1];
// 当前应用程序在后台被系统杀掉前还剩几秒
NSLog(@"time:%.2f", [application backgroundTimeRemaining]);
if ([application backgroundTimeRemaining] > 10) {
//...
}else{
//...
}
}
// 3.告知操作系统后台任务执行结束
[application endBackgroundTask:self.backgroundTaskIdentifier];
NSLog(@"applicationDidEnterBackground");
});
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
// 后台态 -> 前台态
// 干什么:
// 继续下载
// 提示服务器用户在线
NSLog(@"applicationWillEnterForeground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// 调用时机:非活动态 -> 活动态
// 恢复游戏
// 恢复各种Timer
NSLog(@"applicationDidBecomeActive");
}
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"applicationWillTerminate");
}
@end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。