使用NSURLRequest创建一个请求对象(request)。请求对象包含请求的URL、请求方法、请求头等信息(入参)
利用POST方法发送到url端点
· 取消请求:request设置为nil
loading动画
使用NSURLSession或NSURLConnection发送请求
· 调用Request类方法xx发起网络请求
(1)创建HTTPRequest对象,看shared、init
shared做了什么:
? ?创建单例httpRequest
? ?创建线程Thread(创建并启动一个线程,关联到xx方法)
? ? ? ? ? ?@autoreleasepool [1]
? ? ? ? ? ?超时检测线程:runloop获取当前线程的运行循环对象,addPort添加端口
? ? ? ? ? ?将计时器添加到Thread的runloop中?init做了什么:
? ?创建了一个网络请求队列httpQueue,设置最大并发数4
? ?创建了两个管理回调函数的字典
? ?创建锁lock
(2)创建一个Operation对象,httprequest执行xx方法,返回该对象
创建Operation对象,执行(创建operation)方法:
? ?获取请求头中Params的值
? ?对Operation进行一些操作和赋值
? ?将Params字段的值赋给Operation对象的body属性根据回调函数(是否存在),创建一个包含两个回调函数的NSArray对象,并将其赋值给闭包回调的变量
将Operation对象的hash值作为键
将闭包回调对象作为值
(在请求完成时可以根据Operation对象的hash值找到相应的回调函数)添加到xx字典中
(3)是否需要重新加载网络,重载次数,优先级的设置
(4)检查当前的 HTTP 请求是否可以使用缓存
· fetchCaching获取缓存
switch case选取缓存策略:
默认缓存策略、优先缓存策略:
? shareInstance单例,init
? ? 注册两个观察者
? ? 监听系统内存警告的通知、监听应用程序即将终止的通知
? ? 如果缓存数据存在:将缓存数据返回
? ? ? ? ? ? ? ? ?从请求队列中删除该请求
无缓存:不操作直接break
· startWith:看网络是不是慢速,网络降级;埋点
在请求完成后,会得到一个响应对象
响应对象包含响应的状态码、响应头等信息。可以使用NSHTTPURLResponse类来处理响应
(1)请求后调用success,failure回调函数
· succes闭包用于在请求成功时执行一些操作,其中json参数是请求返回的JSON数据
停止loading动画
json转成model ?
打点
· failure,用于在请求失败时执行一些操作,error参数是请求返回的错误信息
停止loading动画?
弹窗:网络繁忙,请稍后再试!
打点
对于解析后的数据,可以根据需求进行处理。比如将数据展示在UI界面上、存储到本地数据库中等。
在网络请求过程中,可能会出现各种错误,比如网络连接失败、服务器返回错误等。需要对这些错误进行处理,以便及时通知用户或进行相应的处理。
[1]@autoreleasepool
?是Objective-C中的一个语法结构,用于创建一个自动释放池。自动释放池是一种内存管理机制,它允许在一定范围内创建的对象在超出该范围后自动释放。
在@autoreleasepool
代码块内创建的对象都会被添加到该自动释放池中。当代码块结束时,自动释放池会自动释放其中的所有对象,从而释放它们所占用的内存。
使用自动释放池可以避免内存泄漏和内存消耗过大的问题,特别是在需要创建大量临时对象的情况下,使用自动释放池可以提高应用程序的性能和稳定性。
[2]类似c语言的print("%s",str)