1.1NSURLSession的使用 NSURLSession本身是不会进行请求的,而是通过创建task的形式进行网络请求(resume()方法的调用),同一个NSURLSession可以创建多个task...NSURLRequest *)request; -(NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url; 通过request对象或url创建,同时指定任务完成后通过...指定任务完成后的回调代码块: -(NSURLSessionUploadTask*)uploadTaskWithRequest:(NSURLRequest*)requestfromFile:(NSURL*...指定任务完成后的回调代码块: -(NSURLSessionDownloadTask*)downloadTaskWithRequest:(NSURLRequest*)requestcompletionHandler...)发出的网络请求,无法拦截WKWebview、CFNetwork以及基于CFNetwork实现的第三方框架(如MKNetworkit)发出的网络请求。
property(nonatomic, readonly) double estimatedProgress; 这个值根据预期接收的字节总数(包括主文档和所有潜在的子资源)从0.0到1.0不等 在页面加载完成后...:(void (^)(id, NSError *error))completionHandler; completionHandler会在脚本执行完成或者失败时调用 id是代码执行成功的返回结果,error...如果你尝试在任务完成后发送一个新的response对象,会触发异常 如果在任务已经停止加载后调用,将会触发异常 为任务添加接收的数据 - (void)didReceiveData:(NSData *)...如果在任务已经停止加载后调用,将会触发异常 将任务标记为成功完成 - (void)didFinish; 如果你尝试在发送response之前或者任务已经结束之后调用该方法,将会触发异常 如果在任务已经停止加载后调用...,将会触发异常 把任务标记为失败 - (void)didFailWithError:(NSError *)error; 如果在任务已经被标记为结束或失败后再调用这个方法会触发异常 如果在任务已经停止加载后调用
经常更新内容的应用程序,如新闻应用程序或社交媒体应用程序,可以使用这个功能来确保它们的内容总是最新的。在用户启动应用程序之前,在后台下载数据可以最大程度地减少显示数据的延迟时间。...2、在启动时调用UIApplication的setminimumbackfetchinterval方法。(指定后台取回操作之间必须经过的最小时间量。)...Figure 1 当系统调用AppDelegate的application:performFetchWithCompletionHandler:方法时,配置一个NSURLSession对象来下载新数据...系统一直等待,直到网络和电源状况良好,所以能够快速取回到足够的数据。...当完成更新App后,回调Block提供正确的结果(包括没有合适的新数据) 注意: 及时调用完成处理程序,以及正确的结果,可以帮助确定应用程序未来的执行时间。
它是异步非阻塞的,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般我们的业务处理逻辑会变成一个回调函数,等待IO操作完成后,由系统自动触发。...在进行读写操作时,只需直接调用API的read/write方法即可。...即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。...AIO其实是对NIO的增强,新增了许多支持异步的类如AsynchronousServerSocketChannel,AsynchronousChannel,AsynchronousChannelGroup...,CompletionHandler等。
如果通过调用finishTasksAndInvalidate方法使会话失效,则会话将一直等待,直到会话中的最终任务完成或失败,然后再调用此委托方法。...会话在任务完成接收所有预期数据后调用此委托方法。如果未实现此方法,则默认行为是使用会话配置对象中指定的缓存策略。...注:如果委托实现此方法,则它必须调用completionHandler完成处理程序;否则,应用程序会泄漏内存。...此委托方法仅在流任务的所有入队读取和写入操作完成后才会调用。...@property (nullable, copy, readonly) NSDate *secureConnectionEndDate; */ /* 用户代理完成与服务器建立连接后的时间,包括完成与安全相关的握手和其他握手
WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation; // 当main frame导航完成时...; // 当web content处理完成时,会回调 - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE...typedef NS_ENUM(NSInteger, WKNavigationType) { // 链接已经点击 WKNavigationTypeLinkActivated, // 表单提交...:(void (^)(void))completionHandler; // 调用JS的confirm()方法 - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage...item(页面) @property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *currentItem; // 后一页
同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程...阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。...图1 同步阻塞IO 如图1所示,用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作。...用户线程使用同步阻塞IO模型的伪代码描述为: { read(socket, buffer); process(buffer); } 即用户需要等待read将socket中的数据读取到buffer后...最后内核将read的数据和用户线程注册的CompletionHandler分发给内部Proactor,Proactor将IO完成的信息通知给用户线程(一般通过调用用户线程注册的完成事件处理函数),完成异步
同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程...阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。...图1 同步阻塞IO 如图1所示,用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作。...用户线程使用同步阻塞IO模型的伪代码描述为: { read(socket, buffer); process(buffer); } 即用户需要等待read将socket中的数据读取到buffer后,才继续处理接收的数据...最后内核将read的数据和用户线程注册的CompletionHandler分发给内部Proactor,Proactor将IO完成的信息通知给用户线程(一般通过调用用户线程注册的完成事件处理函数),完成异步
阻塞I/O模型 阻塞I/O模型与同步I/O模型相似,它也需要应用程序等待I/O操作完成。阻塞I/O适用于简单的应用,但可能导致性能问题,因为应用程序会在等待操作完成时被阻塞。...非阻塞I/O模型 非阻塞I/O模型允许应用程序发起I/O操作后继续执行其他任务,而不必等待操作完成。这种模型适用于 需要同时处理多个通道的应用。...} catch (IOException e) { e.printStackTrace(); } } } 在上述示例中,应用程序可以在等待连接完成时执行其他任务...然后,我们使用无限循环等待就绪的通道,当有通道准备好时,我们可以处理相应的I/O操作。 I/O多路复用非常适合需要同时处理多个通道的应用,如高性能网络服务器。...异步I/O 异步I/O 模型也称为"真正的异步I/O",它允许应用程序发起I/O操作后继续执行其他任务,而不需要等待操作完成。
,如果为nil则使用主队列 @property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; //完成网络请求后回调块的...,并发队列实现多线程处理多个请求完成后的数据处理 static dispatch_queue_t url_session_manager_processing_queue() { static...= completionHandler; /* 需要注意下,AFURLSessionManagerTaskDelegate中下载文件完成后会调用delegate.downloadTaskDidFinishDownloading...:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { //调用用户自定义回调块,执行完成回调块...NSURLSessionDataDelegate的代理方法,同样的,如果AFURLSessionManagerTaskDelegate能响应的关于数据处理的方法都会通过task找到对应delegate后调用其对应的方法
而使用NSURLSessionUploadTask下载文件,会默认下载到沙盒中的tem文件中,不会出现内存暴涨的情况,但是在下载完成后会把tem中的临时文件删除,需要在初始化任务方法时,在completionHandler...NSURLSession进行断点下载,当暂停下载任务后,如果downloadTask(下载任务)为非空,调用cancelByProducingResumeData:(void (^)(NSData *resumeData...))completionHandler这个方法,这个方法接收一个参数,完成处理代码块,这个代码块有一个NSData参数resumeData,如果resumeData非空,我们就保存这个对象到视图控制器的...这对于跨会话共享信息,如内容类型,语言,用户代理,身份认证,是很有用的。...下载完成调用 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
阻塞I/O模型阻塞I/O模型与同步I/O模型相似,它也需要应用程序等待I/O操作完成。阻塞I/O适用于简单的应用,但可能导致性能问题,因为应用程序会在等待操作完成时被阻塞。...非阻塞I/O模型非阻塞I/O模型允许应用程序发起I/O操作后继续执行其他任务,而不必等待操作完成。这种模型适用于需要同时处理多个通道的应用。...socketChannel.close(); } catch (IOException e) { e.printStackTrace(); } }}在上述示例中,应用程序可以在等待连接完成时执行其他任务...然后,我们使用无限循环等待就绪的通道,当有通道准备好时,我们可以处理相应的I/O操作。I/O多路复用非常适合需要同时处理多个通道的应用,如高性能网络服务器。...异步I/O异步I/O 模型也称为"真正的异步I/O",它允许应用程序发起I/O操作后继续执行其他任务,而不需要等待操作完成。
errorHandler:^(NSError *error) { NSLog(@"Error: %@", error); }]; // 等待请求完成...在请求完成后,我们可以通过completionHandler和errorHandler来处理请求结果和错误信息。 3....在MKNetworkKit中,可以通过completionHandler和errorHandler来分别处理请求成功和失败的情况。...中处理任务完成后的结果。...在处理结果时,我们可以调用parseNewsWithData方法解析数据,并调用showNews方法展示新闻内容。
errorHandler:^(NSError *error) { NSLog(@"Error: %@", error); }]; // 等待请求完成...在请求完成后,我们可以通过completionHandler和errorHandler来处理请求结果和错误信息。3....在MKNetworkKit中,可以通过completionHandler和errorHandler来分别处理请求成功和失败的情况。...中处理任务完成后的结果。...在处理结果时,我们可以调用parseNewsWithData方法解析数据,并调用showNews方法展示新闻内容。
内核主动将数据拷贝到用户空间并通知应用程序 还是等待应用程序通过Selector来查询,当数据就绪后,应用程序再发起一个read调用,这时内核再把数据从内核空间拷贝到用户空间。...ServerSocket:用于在本机(Server端)开一个端口,被动的等待数据(用accept()方法),与 Client 端端建立连接后可以进行数据交换 Socket:用于连接远端机器(Server...网络数据读取在异步模式下的工作过程 应用程序调用read API,同时告诉内核: 数据准备好了后,拷贝到哪个Buffer 调用哪个回调函数去处理这些数据 之后,内核接到该read指令,等待网卡数据到达。...Http11Processor无法阻塞等待数据的,按异步I/O模式,Http11Processor在调用Nio2SocketWrapper#read时需注册回调类,调用read后会立即返回。...为解决这个问题,Http11Processor通过2次read调用完成数据读取操作: 第一次read调用 连接刚刚建立好后,Acceptor创建SocketProcessor任务类交给线程池去处理,Http11Processor
和多路复用的java nio相比较,可以发现,异步io是在数据读取或者写入调用已经完成的时候,再通知调用者,而非阻塞多路复用io则是在有数据就绪,可以读写的时候通知调用者,读写仍然是由调用者执行并且是阻塞的...CompletionHandler,回调接口,在socket进行accept/connect/read/write等操作时,可以传入一个CompletionHandler的实现,操作执行完毕后,会调用注册的...CompletionHandler。...AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。...非阻塞的实现是 I/O 命令可能并不会立即满足,需要应用程序调用许多次来等待操作完成。
WKNavigationDelegate 如命名,这个是WKWebView的导航的代理。它控制了WKWebView在加载一个页面流程中的各个关键时间节点的。...didCommitNavigation:(WKNavigation *)navigation{ NSLog(@"页面开始返回"); } // 页面加载完成之后调用 - (void)webView...:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ NSLog(@"页面完成加载"); } // 页面加载失败时调用...:(void (^)(void))completionHandler{ NSLog(@"%@",message); completionHandler(); } ---- js调用原生方法....postMessage(需要传递的数据) 原生调用js方法 [self.webView evaluateJavaScript:@"function('action')" completionHandler
jdk1.4 是使用的 select/poll 模型 jdk1.5 以后把select/poll 改为了epoll模型 异步 I/O 只需要通知内核要执行什么操作,内核执行完成后通知你已经执行完成...由于网络的传输效率问题,程序基本上都是在等待网络数据传输,因此 阻塞I/O 效率很低。 如果客户端有多个用户同时访问服务器,我们一般会开启多线程进行处理,客户端的请求。如下图: ?...NIO 实现原理 程序需要调用Seletor.select()方法,阻塞获取就绪的channel。然后从channel中读取数据做响应的处理。...AIO 实现原理 程序调用AIO的accept方法并传入Completionhandler,该方法是非阻塞方法。 等数据准备完成后回调Completionhandler处理响应操作。...AIO只是帮助你从内核中将数据复制到用户空间中,并调用你传入的回调方法。 NIO 是需要程序自己从内核中将数据复制到用户空间中,并需要程序自己调用相应的处理逻辑。 ----
领取专属 10元无门槛券
手把手带您无忧上云