怎么保证线程安全?
只在主线程刷新UI。
防止线程资源抢夺,要用@synchronized进行加锁保护。
异步操作保证线程安全,尽量使用GCD。
GCD内部怎么实现的?
iOS和OSX的核心是XNU内核,GCD是基于XNU内核实现的。
GCD的API全部在libDispatch库中
GCD的底层实现主要是dispatch queue和dispatch source
dispatch queue:管理block
dispatch source: 处理时间
NSOperationQueue和GCD的区别?
GCD是基于C语言的。而NSoperation是对GCD进行了一层面向对象的封装。
GCD队列只支持FIFO原则。NSOperation则能很方便的调度线程顺序,以及设置最大并发数。
NSOperation能很方便的设置线程间的依赖关系。GCD实现则较为复杂。
GCD的执行速度比NSOperation快。
NSOperation支持KVO,可以检测Operation是否在执行。
GCD适用于简单程序。NSOperation适用于复杂程序。
GCD适用时要注意什么?
程序复杂度,任务依赖关系。
MRC下和ARC下,block的使用及注意?
block使用注意block的内存管理,循环引用。很多时候,程序为了保证它认为的正常运行,会隐式持有对象。
MRC:使用——block
ARC:使用——weak\——unsafe——unretained。
如果图片下载失败?
重新下载图片,利用Runloop的输入源回到主线程刷新UIImageView。
Socket的实现原理及Socket之间的通信?
socket就是套接字,拥有一对套接字就可实现通讯。一个运行在客户端,称为ClientSocket。另一个在服务器端,称为ServerScocket。一般的socket连接是TCP连接,当然也可以是UDP连接。参考TCP连接。
http协议的实现?
首先要了解,HTTP协议用于在Internet上发送和接收消息。HTTP协议是一种请求-应答式的协议。客户端向服务器端发送一个HTTP请求包,服务器则向客户端回复一个HTTP应答包。
什么是TCP的三次握手?
TCP的三次握手,建立起客户端与服务器端的联系。
首先,客户端向服务器发送一个syn(syn = j)包,并进入SYN_SEND状态。
服务器接收到客户端的syn包,确认用户的syn包(ack = j +1),同时自己也向客户端发送一个syn(syn = k),即SYN+ACK包,此时服务器进入SYN——RECV状态。
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK。客户端与服务器端进入ESTABLLSHED状态,完成三次握手。
HTTP的组成?
请求行,消息报头,请求正文。
支持服务器/客户端模式
简单快速:客户只需要向服务器只需要发送请求方法和路径。HTTP协议简单。
支持任意类型的数据对象。
无连接:限制每次只处理一个连接。
无状态:没有记忆能力。(需要登陆的网址,复制到另一个浏览器。需要重新输入登陆密码)