block:
1:类似于函数指针,可以作为函数参数或返回值,本身也可以带参数或返回值
2:某种程度上可以代替delegate,只能访问局部变量,不能修改,如果需要修改,那么需要在前面添加__bkock修饰
NSThread
1:使用实例方法创建的,在创建线程的时候开始同步运行线程,而使用类方法创建的是先创建线程在运行线程,运行线程时候可以设置线程优先级。
2:线程执行方法selector只能带一个参数,并且没有返回值
3:线程执行完之后跳回到主线程更显主线程的UI界面
4:需要使用线程锁,如果没有使用线程锁可能导致一些问题出现
GCD:
1:适用于多核多线程,如果是单核也就没有多大意义了,所以在10.6以后,ios4.0之后被引入
2:用于代替NSThread,NSOperationQueue,NSInvocationOperation
3:相比于单独开辟线程,GCD明显的可以将散落在方法结合在一起,大大增强了代码的可读性和维护性,减少中间参数的传递
4:GCD可以让程序在后台运行更长时间,一般进入后台程序运行时间最多只有5分钟,而使用GCD最多可以达到10分钟,可以在这期间做一些清理缓存,发送数据等工作。
线程(Thread)和进程(Process):
1:计算机CPU就像一座工厂,单个CPU只能运行一个任务,里面有许许多多的厂房,厂房里有许许多多的工人,厂房就像是进程,工人就像是线程,一个进程可以包括多个线程,车间的空间是共享的,进程的空间是共享的,每个线程都可以共用这些内存。
TCP/IP ,http和scoket
1:TCP/IP 手机能够链接网络是因为手机底层实现了TCP/IP协议,发起一次TCP链接需要经过三次握手。
2:http(超文本传输协议)一般由客户端主动发起请求,服务器端响应请求,是单向的,服务端不能主动像客户端发起请求,会在http头部带上一个请求头和带上请求体,包含一些请求数据,一次请求结束后会终端通信,通信及时性不强,是一种短链接。
3:scoket(套接字),通常scoket链接就是TCP链接,是使用套接字进行通信的,可以算是长连接,服务器端和客户端都可以发起请求,并且一次请求后不会立刻中断,通过套接字接口实现和多个不同应用程序进行通信。