14

XML中间的 数据表达/传输数据的语言

优点:特别强大 强大到很多平台都有基于XML的独立语言,如MXMLHTML

缺点:传输小型数据时,特别啰嗦

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

    }

]

 

JSONXML的对比

JSON                                           XML

更轻量                                      更高功能

文件小                                      文件大

更关注内容                               更加完整的描述结构

传输数据                                  能干更多其他事情

 

JSONXML的使用

1)旧项目支持ios系统

基本使用XML

旧项目很有可能通信已经使用WebService

2)中小型项目ios/android先开展的

一上来很有可能采用JSON

3)特殊情况

XML里嵌套JSON

<menu data="{'title'='Open','arthority'='2'}"></menu>

 

JSONios下的解析

1NSJSONServ...

NSArray/NSDictionary  <->  JSON String

练习:

JSON转换为实体对象

[

    {

        "name" : "三桑",

        "age" : 8,

        "phoneNumber" : "911"

    },

    {

        "name" : "安卓",

        "age" : 10,

        "phoneNumber" : "912"

    }  

]

Person

新浪微博API

open.weibo.com -> 文档 -> 微博API -> 微博接口 -> statues/home_timeline

 

JSONPlist区别

JSON                           Plist

跨语言跨平台               苹果平台自己使用

JSON写的                   XML写的

用于数据传输(C/S)       用于轻量存储/应用配置

 

<><><><><><><><><><><><><><><><><><> 

应用程序的生命周期

1)对象的生命周期

    init dealloc ...

2ViewController的生命周期

    viewDidLoad

    viewWillAppear...

3View的生命周期

    drawRect:

    layoutSubviews:

4)应用程序的生命周期

    application:didFinishLaunchingWithOptions:
应用程序生命周期干什么?

    负责在应用程序发生一些事件时,调用相关消息

事件 <-> 应用程序状态的改变

 

应用程序的状态

在文档中搜索ios app programming

由操作系统导致的闹铃,购买等状况,应用程序会进入非活动状态Inactive

1Not runing非运行态(没打开)

2Inactive非活动态(暂停)

从属于前台

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

原文地址:https://www.cnblogs.com/yangmx/p/3674810.html