iOS 网络-HTTP

Thu 11 May 2017 by Little Captain

基本概念

如何找到服务器?

  • 客户端通过URL找到想要连接的服务器

URL

  • Uniform Resource Locator : 统一资源定位符
  • 通过1个URL,能找到互联网上唯一的1个资源
  • 互联网上的每个资源都有一个唯一的URL
  • URL就是资源的地址、位置

URL的基本格式

  • 协议://主机地址/路径
  • 协议 : 不同的协议,代表着不同的资源查找方式、资源传输方式
  • 主机地址 : 存放资源的主机(服务器)的IP地址(域名)
  • 路径 : 资源在主机(服务器)中的具体位置

URL中常见的协议

HTTP

  • 超文本传输协议
  • 访问的是远程的网络资源
  • http://
  • http协议是在网络开发中最常用的协议

file

  • 访问的是本地计算机上的资源
  • file://
  • 不用加主机地址

mailto

  • 访问的是电子邮件地址
  • mailto:

FTP

  • 访问的是共享主机的文件资源
  • ftp://

TCP/IP协议簇

  • 通常意义上,我们使用的网络是在TCP …
read more

iOS 文件下载

Thu 11 May 2017 by Little Captain

小文件

  • 利用NSURLConnection发送一个HTTP请求下载
  • 直接用NSData的 +dataWithContentsOfURL
  • 下载图片, 可以利用SDWebImage框架

大文件

  • 建议使用 NSURLSession 或者第三方框架
read more

iOS 解压缩

Thu 11 May 2017 by Little Captain

使用第三方框架

框架地址

  • ZipArchive
  • 需要引入libz.dylib框架

创建压缩文件

  • createZipFileAtPath:withFilesAtPaths:
  • createZipFileAtPath:withContentsOfDirectory:

解压

  • unzipFileAtPath:toDestination:
read more

iOS 网络-NSURLSession

Thu 11 May 2017 by Little Captain

Task的类型

使用步骤

  • 使用NSURLSession对象创建Task
  • 执行Task

常用方法

  • sharedSession : 获得共享的Session
  • sessionWithConfiguration : 自定义Session

NSURLSessionTask

常见方法

  • suspend, 暂停
  • resume, 恢复
  • cancel, 取消

常用属性

  • error, 错误
  • response, 响应

NSURLSessionDownloadTask

常见方法

  • cancelByProducingResumeData
read more

iOS 网络-NSURLConnection

Thu 11 May 2017 by Little Captain

作用

  • 负责发送请求,建立客户端和服务器的连接
  • 发送数据给服务器,并收集来自服务器的响应数据

常用相关类

NSURL

  • 请求地址
  • 有时必须进行百分号转码, 使用方法stringByAddingPercentEscapesUsingEncoding

NSURLRequest

  • 一个NSURLRequest对象就代表一个请求
  • 包含的信息
    • 请求方法
    • 请求头
    • 请求体
    • NSURL对象
    • 请求超时
    • ...

NSMutableURLRequest

  • setTimeoutInterval
    • 超过这个时间就算超时,请求失败
    • 设置请求超时等待时间
  • setHTTPMethod
    • 设置请求方法
    • GET或POST
  • setHTTPBody
    • 设置请求体
  • setValue:forHTTPHeaderField:
    • 设置请求头

使用步骤

1. 创建一个NSURL对象

  • 设置请求路径

2. 创建一个NSURLRequest对象

  • 设置
    • NSURL对象
    • 请求头
    • 请求体

3. 发送请求

NSURLConnection常见的发送请求方法

同步请求

  • sendSynchronousRequest

异步请求

根据对服务器返回数据的处理方式的不同,又可以分为2种

block回调 …

read more

iOS 网络-基础

Thu 11 May 2017 by Little Captain

学习网络编程的意义

  • 在移动互联网时代,移动应用的特征
    • 几乎所有应用都需要用到网络
    • 只有通过网络跟外界进行数据交互、数据更新,应用才能保持新鲜、活力
    • 如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水
  • 网络编程是一种实时更新应用数据的常用手段
  • 网络编程是开发优秀网络应用的前提和基础

优秀移动应用的标准

  • 良好的UI
  • 良好的用户体验
  • 实时更新的数据

App 分类

  • 新闻
  • 视频
  • 音乐
  • LBS
  • 电商
  • 社交

网络基本概念

Client

  • 客户端
  • 移动应用

Server

  • 服务器
  • 为客户端提供服务、提供数据、提供资源的机器

按照软件开发阶段来分,服务器可以大致分为2种

远程服务器

  • 别名
    • 外网服务器
    • 正式服务器
  • 使用阶段, 应用上线后使用的服务器
  • 使用人群, 供全体用户使用
  • 速度, 取决于服务器的性能、用户的网速

本地服务器

  • 别名 …
read more

Linux 任务管理

Thu 11 May 2017 by Little Captain

&

  • 加在命令后, 把这个任务放入到后台执行

ctrl + z

  • 可以将正在前台执行的命令放入后台, 并处于暂停状态

ctrl + c

  • 终止前台进程

jobs

  • 查看当前有多少在后台运行的任务
  • jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

fg

  • 将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出

bg

  • 将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出

kill

  • 通过jobs命令查看job号(假设为num),然后执行kill %num
  • 通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

nohup

  • 如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup …
read more

Node.js 概述

Thu 11 May 2017 by Little Captain

V8引擎

  • 用于Chrome浏览器的 JS 解释部分
  • 没有历史包袱,没有同步I/O。不会出现一个同步I/O导致事件循环性能急剧降低的情况。
  • V8性能足够好,远远比Python、Ruby等其他脚本语言的引擎快。
  • JavaScript语言的闭包特性非常方便,比C中的回调函数好用。

总览

  • Node.js是一个让JavaScript运行在服务器端的开发平台
  • Node就是一个js的执行环境
  • Node.js不是一种独立的语言,与PHP、JSP、Python、Perl、Ruby的“既是语言,也是平台”不同,Node.js使用JavaScript进行编程,运行在JavaScript引擎上(V8)
  • 与PHP、JSP等相比,Node.js跳过了Apache、Naginx、IIS等HTTP服务器,它自己不用建设在任何服务器软件之上。Node.js的许多设计理念与经典架构(LAMP)有着很大的不同,可以提供强大的伸缩能力。
  • Node.js哲学,花最小的硬件成本,追求更高的并发,更高的处理性能。
  • Node …
read more

RunLoop 就这一篇

Wed 10 May 2017 by Little Captain

概念

  • 字面意思 : 运行循环

示意图

![](../assets/images/多线程/runloop mode.png)

基本作用

  • 保持程序的持续运行
  • 处理App中的各种事件
    • 触摸事件
    • 定时器事件
    • Selector事件
  • 节省CPU资源
  • 提高程序性能, 该做事时做事,该休息时休息
  • ...

如果没有 runloop

int main(int argc, char * argv[]) {
    NSLog(@"execute main function"); // 程序开始
    return 0; // 程序结束
}

如果有了 runloop

int main(int argc, char * argv[]) {
    BOOL running = YES; // 程序开始
    do {
        // 执行各种任务 …
read more

多线程-NSOperation总结

Wed 10 May 2017 by Little Captain

概述

  • 配合使用 NSOperation 和 NSOperationQueue 也能实现多线程编程

NSOperation 是个抽象类

  • 不具备封装操作的能力,必须使用它的子类
  • 使用 NSOperation 子类的方式有3种
    • NSInvocationOperation
    • NSBlockOperation
    • 自定义子类继承 NSOperation
      将任务封装到内部的 main 方法中

实现多线程的具体步骤

  • 将需要执行的操作封装到一个 NSOperation 对象中
  • 将 NSOperation 对象添加到 NSOperationQueue 中
  • 系统会自动将 NSOperationQueue 中的 NSOperation 取出来
  • 将取出的 NSOperation 封装的操作放到一条新线程中执行

具体使用

NSInvocationOperation

  • 创建NSInvocationOperation对象
    • alloc
    • initWithTarget
  • 调用start方法开始执行操作
    • start
    • 一旦执行操作,就会调用target的sel方法
  • 注意
    • 默认情况下,调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步执行操作 …
read more