首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NSURLConnection是否阻止主/ UI线程

在iOS开发中,NSURLConnection是一个用于处理网络请求的类。它不会阻止主/UI线程。NSURLConnection使用异步请求,它会在后台线程中处理网络请求,并在请求完成时通知主线程。这样可以避免阻塞主线程,保证应用程序的响应性。

然而,NSURLConnection已经被废弃,取而代之的是NSURLSession。NSURLSession是一个更加现代化、更加灵活的网络请求库,它也不会阻止主/UI线程。NSURLSession使用异步请求,并且支持后台传输和断点续传等功能。

总之,NSURLConnection和NSURLSession都不会阻止主/UI线程,它们都是在后台线程中处理网络请求,并在请求完成时通知主线程。这样可以保证应用程序的响应性和用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一个创建自定义事件源的例子

下面一段代码展示了子线程入口该怎么设计。这个例子的关键部分展示了 RunLoop 的基本结构。从本质上说,你添加输入源和计时器到 RunLoop ,然后反复调用程序来启动 RunLoop 。...每次 RunLoop 程序返回,检查是否出现任何条件批准线程退出。...某些时候一些系统程序会注入输入源到 RunLoop 来处理事件,你无法了解到是否有系统添加的输入源,这将阻止 RunLoop 退出。...这个函数里会遍历所有待处理的 UIView/CAlayer 以执行实际的绘制和调整,并更新 UI 界面。      ...一个Demo 根据上面对NSURLConnection的介绍,我们模拟一个类似的设计来实现通过RunLoop来等待和处理事件。 第一步:创建任务线程 创建子线程,用于初始化一个接收自定义事件源。

2.2K100

iOS-网络编程(二)文件上传和断点离线下载

POST请求设置 2.2 发送请求 NSURLConnection常见的发送请求方法分为同步和异步请求 注意:同步请求和异步请求的区别在于是否会阻塞线程,同步请求会阻塞线程等请求完毕以后再执行后面的任务...苹果为了方便我们拿到数据以后显示或者刷新UI,默认代理方法在主线程中调用,我们可以通过对象方法setDelegateQueue来设置代理执行的队列。 2....答案是可以的但是需要注意,initWithRequest会将方法会将NSURLConnection对象加入当前对应的RunLoop中,当我们在子线程中进行网络请求,默认子线程的RunLoop不会自动创建...,NSURLConnection对象会被释放,因此我们需要开启子线程中的RunLoop,保证NSURLConnection对象不会被释放。...,如果在回调方法中拿到数据刷新UI,必须要回到主线程刷新UI

2.3K80

iOS复习中有关SDWebImage可能知识点总结(1)

如果内存缓存中没有,生成NSInvocationOperation添加到队列开始从硬盘查找图片是否已经缓存 6....图片解码处理在一个NSOperationQueue完成,不会拖慢主线程UI.如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多. 14....3.1 基于NSURLConnection的SDWebImage (至少2014年7月的版本)老版本的基于 NSURLConnection 的 SDWebImage 是通过这样的机制:NSURLConnection...工作在主线程,虽然NSURLConnection工作在子线程,但因为UI相关的操作和回调中的setImage都在同一个主线程,滑动屏幕会导致主线程的runloop切换mode为UITrackingRunLoopMode...的最大区别是不是基于主线程线程 的runloop控制的,而是通过NSOperation新开子线程,所以同意主线程的runloop切换mode并不会影响子线程的操作。

87120

RunLoop

每次调用 RunLoop 的函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。如果需要切换 Mode,只能退出 Loop,再重新指定一个 Mode 进入。...这个函数里会遍历所有待处理的 UIView/CAlayer 以执行实际的绘制和调整,并更新 UI 界面。...当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:com.apple.NSURLConnectionLoader 和 com.apple.CFSocket.private...为此 AFNetworking 单独创建了一个线程,并在这个线程中启动了一个 RunLoop: 使用NSOperation+NSURLConnection并发模型都会面临NSURLConnection下载完成前线程退出导致...线程中一旦出现繁重的任务就会导致界面卡顿,这类任务通常分为3类:排版,绘制,UI对象操作。

82520

iOS基础问答面试题连载(三)-附答案

线程:默认启动的线程 作用:(1)显示和刷新UI界面 (2)处理UI事件 注意点: 不要将耗时操作放在主线程中执行 UI操作必须在主线程中执行 !!!!...NSOperation可以通过KVO提供对NSOperation对象的精细控制(如监听当前操作是否被取消或是否已经完成等) NSOperation可以方便的指定操作优先级。...---- 31.请简单说明使用NSURLConnection发送网络请求的几种方法? 使用NSURLConnection发送同步请求([NSURLConnection sendSync....])...使用NSURLConnection发送异步请求1([NSURLConnection sendAsync...])...搜索 多个关键字,先对每个关键字进行散列,然后多个关键字进行或运算,如果值一致则搜索结果一致 版权 对文件进行散列判断该文件是否是正版或原版的 文件完整性验证 对整个文件进行散列,比较散列值判断文件是否完整或被篡改

83250

iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

iOS多线程——你要知道的NSThread都在这里 iOS多线程——你要知道的GCD都在这里 iOS多线程——你要知道的NSOperation都在这里 iOS多线程——你要知道的RunLoop都在这里...对象,并设置不立即开始,手动开始 self.connection = [[NSURLConnection alloc] initWithRequest:[[NSURLRequest alloc]...currentRunLoop forMode:NSRunLoopCommonModes]; //开始从服务端获取数据 [self.connection start]; //判断执行任务的是否为主线程...,防止代理方法需要修改UI dispatch_async(dispatch_get_main_queue(), ^{ [self.delegate fileDownloadOperation...,防止主线程有修改UI的操作 dispatch_async(dispatch_get_main_queue(), ^{ [self.delegate fileDownloadOperation

1.6K51

再谈RunLoop

所有起点是UI的代码, 除非明确指明运行在其他线程上 (通过类似performOnBackground, performSelector:onThread: 等方式),否则都是运行在主线程的runloop...上的 不要在runloop中运行些“大任务”,比如循环个十万二十万次或者其他什么东西, 因为 你实际上是在使用和UI相同的线程。...每次调用 RunLoop 的函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。如果需要切换 Mode,只能退出 Loop,再重新指定一个 Mode 进入。...当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:com.apple.NSURLConnectionLoader 和 com.apple.CFSocket.private...六 本次分享要解决的问题,使用RunLoop实现常驻线程 举个例子: AFURLConnectionOperation 这个类是基于 NSURLConnection 构建的,其希望能在后台线程接收 Delegate

68941

再谈RunLoop

所有起点是UI的代码, 除非明确指明运行在其他线程上 (通过类似performOnBackground, performSelector:onThread: 等方式),否则都是运行在主线程的runloop...上的 不要在runloop中运行些“大任务”,比如循环个十万二十万次或者其他什么东西, 因为 你实际上是在使用和UI相同的线程。...每次调用 RunLoop 的函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。如果需要切换 Mode,只能退出 Loop,再重新指定一个 Mode 进入。...当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:com.apple.NSURLConnectionLoader 和 com.apple.CFSocket.private...六 本次分享要解决的问题,使用RunLoop实现常驻线程 举个例子: AFURLConnectionOperation 这个类是基于 NSURLConnection 构建的,其希望能在后台线程接收 Delegate

78940

SDWebImage 图片下载缓存框架 常用方法及原理

)state; ---- 三、参数介绍 options 枚举: SDWebImageRetryFailed 失败后重试, 默认如果下载失败,这个url会被加入黑名单并且不会尝试再次下载,设置这个枚举会阻止把失败的...如果读取到就将图片缓存到内存并回调给SDWebImageManager,如果找不到就让SDWebImageDownloader 执行下载操作,在 SDWebImageDownloaderOperation 单个图片的下载操作中利用 NSURLConnection...图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。...图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。...写文件到硬盘在单独 NSInvocationOperation 中完成,避免拖慢主线程

3.1K40

不要使用 Dispatcher.Invoke,因为它可能在你的延迟初始化 Lazy 中导致死锁

此死锁的触发条件 Lazy 的线程安全参数设置为默认的,也就是 LazyThreadSafetyMode.ExecutionAndPublication; 后台线程 UI 线程并发访问这个 Lazy...,且后台线程先于 UI 线程访问这个 Lazy; Lazy 内部的代码包含主线程的 Invoke。...此死锁的原因 后台线程访问到 Lazy,于是 Lazy 内部获得同步锁; UI 线程访问到 Lazy,于是 UI 线程等待同步锁完成,并进入阻塞状态(以至于不能处理消息循环); 后台线程的初始化调用到...完成,而 UI 线程由于进入 Lazy 的等待,于是不能完成 Invoke 中的任务;于是发生死锁。...所以,这段初始化代码既然不可避免地会并发,那么就应该阻止并发造成的死锁问题。也就是不要使用 Invoke 而是改用 InvokeAsync。

31220
领券