14 - XML、JSON、PLIST对比和APP生命周期

时间:2023-03-09 12:59:43
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