如何更好地优化 iOS 上的网络?

2024-03-28

我在 GitHub 上创建了一个项目,以便我可以学习如何优化 iOS 应用程序的网络。我大量使用了块和 GCD,在观看 WWDC 2012 视频和过去几年的视频后,我了解到我可以使用 NSOperationQueue 做更多事情。具体来说,我可以控制并发操作(网络连接)的数量并提供操作取消。我正在尝试允许 1、2、4、8 和 16 个并发操作,并且看到了我完全没有预料到的有趣结果。我正在测量结果,但我想知道是否还应该测量更多内容。

您可以在这里找到示例项目:

https://github.com/brennanMKE/OptimizedNetworking https://github.com/brennanMKE/OptimizedNetworking

由于我使用 NSURLConnection 的异步 API,因此拥有多个并发连接有很多好处,因为该 API 花费相当多的时间等待 HTTP 数据包。以前,我的代码将从一系列项目开始下载并按顺序请求所有项目,这阻碍了并发的好处。我还一直在使用通知来取消网络连接。现在我可以通过操作来处理这个项目,并且我已将它们设置为使用优先级值和类别,以便我可以对下载进行优先级排序和排序以及取消操作类别。我可以选择为每个视图使用一个类别,当用户离开视图时,该视图的所有操作都将使用该类别取消。这将为活动视图释放资源。

使用更多并发操作的一个问题是 CPU 使用率以及 I/O,但我不知道如何使用 iOS 来测量这些值。相当于 iOS 中显示 CPU 使用情况的“w”命令可能很有用。我不太关心 I/O,但测量它会更全面。

我在网络方面的主要问题是响应式用户界面。我发现我一直在做的事情让UI变得迟缓。这种新方法可能会有很大帮助,但前提是我要减少并发操作的数量。最佳操作次数可能会因连接类型(3G、WiFi 等)而异,因此检查连接类型可能会带来一些优化。

如果您对加速应用程序中的网络通信的更好方法感兴趣,请尝试此示例项目并建议我可以衡量性能的其他方法,并提供进一步优化通信的方法。 (另请注意,我引用了 Apple 示例项目 MVCNetworking 以及 ASIHTTPRequest 项目。

接下来我可能要做的就是合计下载的数据量,并记录该数据量以及完成下载的总时间。

自述文件应该有助于解释该项目及其工作原理。


如果这有助于 Mugunth Kumar 在设置 NSOperationQueue 最大连接大小之前使用可达性类实际检查连接类型MK网络套件 https://github.com/MugunthKumar/MKNetworkKit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更好地优化 iOS 上的网络? 的相关文章

  • 从 UIImagePickerControllerReferenceURL 加载 UIImage

    我正在使用 UIImagePickerController 来允许用户从图像库中选择图像 然后我想在 sqlite 数据库中启动该文件的位置 以便稍后可以参考它 我一直在谷歌上搜索如何做到这一点 但我的结果相当简短 我知道我可以通过调用委托
  • 如何在 iPhone 应用程序中播放来自服务器的视频 URL

    实际上 我通过使用从服务器获取一个网址XMLParser 我想在我的应用程序中播放这个视频网址 现在我使用了 MPMoviePlayerController 但它不起作用 请帮忙 XML解析器 m id loadXMLByURL NSStr
  • 如何确定 NSURLSessionTask 请求何时开始?

    I use NSURLSessionTask我正在尝试监视我的一些 HTTP 请求需要多长时间 我可以监视什么委托方法 或其他方法 NSURLSessionTask实际上提出了最初的请求 如果这是一个NSURLConnection里面一个N
  • 在 Swift 2.0 中隐藏 Home 指示器

    我希望隐藏 Home Indicator 虽然这在 Swift 中很简单 但在 SwiftUI 中似乎并不那么容易 我尝试使用这个 如何使用 SwiftUI 隐藏 home 指示器 https stackoverflow com quest
  • 关系上的核心数据属性?

    我刚刚开始使用核心数据 我有一个Headache实体和一个Medication实体 头痛和药物之间存在多对多的关系 当您加重头痛时 您可以选择多种药物 我希望能够指定这些药物的数量 我对 MySQL 更熟悉 您可以在其中创建一个数据透视表
  • 为什么在快速合并两个视频或更改背景音乐后视频变成黑屏?

    在我的 ios 应用程序中 我想合并两个视频并更改背景音乐 我尝试过 对于普通视频来说效果很好 但是 当我选择任何延时视频 然后尝试合并或更改背景音乐时 视频变成全黑屏 对于我的应用程序 我使用 swift 4 2 和 xcode 10 我
  • 如何使用 Expo 播放 Youtube 视频

    我正在尝试使用反应本机 YouTube 组件 https github com inProgress team react native youtube在我的世博项目中 但是 我无法让它发挥作用 到目前为止 我所拥有的只是带有红色边框的黑屏
  • VNFaceObservation BoundingBox 在纵向模式下不缩放

    作为参考 这源于一个问题视觉API 我正在努力使用Vision通过a检测图像中的人脸VNDetectFaceRectanglesRequest 它在确定图像中正确的人脸数量并提供boundingBox对于每张脸 我的麻烦是由于我UIImag
  • 去除iOS输入阴影

    在 iOS Safari 5 上 我必须遵循输入元素 顶部内部阴影 我想删除顶部阴影 错误 webkit appearance不保存 目前的风格是 input border radius 15px border 1px dashed BBB
  • 如何在 swift 3 中的表视图单元格中实现集合视图的分页?

    在这里 我有一个布局 其中我的表视图单元格之一由集合视图组成 在这个布局中我需要实现分页 但我无法使用func collectionView collectionView UICollectionView willDisplay cell
  • 块执行后变量返回 null

    我正在调度一个队列来在单独的线程上下载一些 flickr 照片 在 viewWillAppear 中 当我记录块内数组的内容时 它完美地显示了所有内容 dispatch queue t photoDowonload dispatch que
  • 当应用程序名称在 InfoPlist.strings 中本地化时,不同的应用程序名称取决于配置

    我们为每个配置使用具有不同 plist 的设置 像这样 目标 Info Dev plist 目标 Info Beta plist 这样我们的配置就可以拥有自己的 CFBundleDisplayName 并且我们可以通过设备上的应用程序名称来
  • iOS 意外的平台状况(预期的“os”、“arch”或“swift”)-可达性

    我刚刚更新了我的 pod 更新后Reachability导致错误 意外的平台状况 预期的 os arch 或 swift I tried to build and clean but it does not work what s the
  • 平滑地将渐变应用于 UIImage

    我正在尝试使用 CoreGraphic 将渐变应用于 UIImage 然而 我得到的结果不是很好 我想在图像底部创建一个黑色到透明的渐变 以便为我放置一些文本创建对比度 然而 我能够实现的渐变与图像不能很好地融合 你可以清楚地看到中心的分离
  • 在我的网络上的其他计算机上查看我的 IIS 托管站点

    在家里 我有一个包含两台机器的简单网络设置 在一台机器上 我有一个使用 IIS7 托管的网站 而不是标准localhost index htm地址我已经添加了一个条目HOSTS将本地 IP 127 0 0 1 指向该域的文件 www mys
  • AWS MobileHub:重命名 Android / iOS 示例项目

    我是 AWS Mobilehub 的新手 我喜欢它允许我使用 AWS 配置选项创建项目 但是 当我尝试构建应用程序 ios swift android 时 它总是使用我的示例项目作为项目名称 在 AWS 项目的大多数配置设置中 例如使用 c
  • AVPlayer 失败并显示 AVPlayerItemStatusFailed(OSStatus 错误 -12983)

    有时 AVPlayer 会失败AVPlayerItemStatusFailed发生故障后 AVPlayer 继续失败AVPlayerItemStatusFailed 我尝试清除 AVPlayer 实例并创建新实例 但无法实现AVPlayer
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • 动态框架中未定义的架构符号

    我正在开发一个 iOS 框架 该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信 我想创建一个动态框架 支持 iOS8 但我偶然发现以下编译错误 Undefined symbols for a
  • 如何使用 Javascript 从 Chrome iOS 下载 blob 文件?

    如何使用 Javascript 从 Chrome iOS 下载 blob 文件 我正在从 iOS 下载文件 pdf excel txt png iOS 没有文件系统 这对下载来说是一个问题 我创建了一个代码 根据操作系统和导航器 如果需要

随机推荐

  • Java:生成具有透明度的缩略图

    我在生成具有 Alpha 通道 透明度 的图像缩略图时遇到问题 我使用的代码是这样的 public void saveThumbnail File file String imageType if bufferedThumb null re
  • 上传错误 - 无法将 apk 文件上传到 Google Play 开发者控制台?

    我在 Google Play 上有一些应用程序已经有一段时间了 但我已经几个月没有发送更新了 现在我尝试发送更新 但在上传 apk 文件时出现上传错误 我尝试过使用另一个应用程序和另一台计算机 但出现了同样的错误 过去 5 天我一直在尝试解
  • 根据所选父节点显示子节点

    嗨 我一直在寻找这个问题的答案 但找不到答案 我只有 3 个月的使用 python django 经验 所以请原谅我的虚拟问题 我使用 django mptt 来显示一个简单的嵌套集导航 ul class root recursetree
  • 使用 LINQ 实体框架的 LEFT JOIN 或 RIGHT JOIN

    尝试使用 Linq 加入 我应该用什么 左连接还是右连接 APPLICANT TABLE PROFILE TABLE APPLICANT ID profile id Applicant Name profile id Applicant N
  • git 空格问题

    空白冲突很糟糕 空白最终对我来说是一种可怕的痛苦 在使用 git 时 git config apply whitespace strip 似乎增加了你发生冲突的机会 当你脱掉 不需要的空白 然后其他合作者会看到被剥离的空白 空格作为他们提交
  • 谷歌登录可以在模拟器中使用,但不能在手机中使用

    我在使用 Firebase 实施 Google 登录时遇到了非常严重的问题 我可以使用我的模拟器 Android 7 0 为 x86 64 构建的 SDK 登录 但如果我将项目上传到手机 Android 6 0 我将无法使用 Google
  • 访问打字稿联合类型中的不同属性

    我正在创建一个处理数据库中的对象的函数 我有两种不同的数据结构 其中相同的属性具有不同的名称 我无法改变这一点 所以我必须用 JavaScript 来处理它 这些对象还有其他差异 但这对此功能并不重要 我想对两种不同类型的对象使用相同的函数
  • iOS 蓝牙应用程序仅在后台模式下“由于信号 9 而终止”

    我正在 Objective c 中开发一个 IOS 应用程序 它显示来自蓝牙 BLE 的心率以及相应的图形 如果应用程序在前台运行 则一切都可以正常分叉 没有任何问题 但是 如果应用程序进入后台模式 BLE 测量仍然会继续 我正在使用 使用
  • Lollipop Android 锁屏小部件

    棒棒糖中的锁定屏幕小部件是否有任何更改 虽然官方文件明确显示没有变化 但是 http www extremetech com computing 192112 android 5 0 lollipop all details and fea
  • 我可以使用 SocketCAN 读取 CRC 和 ACK 位吗?

    我正在寻找一种方法 通过 PiCan2 将消息从一个 Raspberry Pi 发送到另一个 并接收回来以读取 CRC 和 ACK 位 我搜索了文档但找不到这样的选项 我可能错过了什么吗 你不直接处理CRC and ACK 但当此类事件发生
  • Java 中的 HTTP 标头编码/解码

    自定义 HTTP 标头被传递到 Servlet 应用程序以进行身份 验证 标头值必须能够包含重音符号和其他非 ASCII 字符 因此必须采用某种编码 最好是 UTF 8 控制身份验证环境的开发人员向我提供了这段 Java 代码 String
  • 如何循环 QAbstractItemView 索引?

    我想开火QAbstractItemView doubleClicked以编程方式为具有特定文本的项目插入槽 我想用QAbstractItemView如果可能的话 类而不是它的实现 此任务归结为循环项目和比较字符串 但我找不到任何方法可以给我
  • 获取远程用户Mac地址

    我正在开发一个使用 mongodb express 和 nodejs 构建基于内联网的 web 应用程序的项目 该项目的目标是通过身份验证获取用户 mac 地址并运行远程 ssh 然而 我发现很难获取远程电脑的 MAC 地址 客户端和服务器
  • R Markdown 在一个项目中找不到 .bib 文件,而在另一个项目中工作正常

    Rmd 在文件 x 中引用良好 单击 knit 将引用添加到我的引用列表后 但是在文件 y 中 还有一个 rmd 文件设置如下 title Swans bibliography library bib output html documen
  • 从批处理文件运行 vbscript

    我只需要编写一个简单的批处理文件来运行 vbscript vbscript 和批处理文件位于同一文件夹中 并且位于 SysWOW64 目录中 因为 vbscript 只能在该目录中执行 目前我的批处理文件如下 echo off WINDIR
  • 如何通过 XMPP (Jabber) 消息在网络上发送图像?

    For the 用于 Stack Overflow 聊天的 XMPP 界面 https meta stackexchange com questions 57316 offer an xmpp method for chat 63420 6
  • Python 使用 urllib2 发起请求时 Tor 检查失败

    读完后other https stackoverflow com questions 1096379 tor with python 问题 https stackoverflow com questions 711351 using url
  • 如何在 Windows 7 上的 Python 2.7.1 中安装 easy_install

    我已在 Windows 7 上安装了 Python 2 7 1 但无法安装 easy install 请帮我 我通常只是跑步ez setup py http peak telecommunity com dist ez setup py I
  • 如何在Eclipse中引用不在src中的文件

    我正在尝试获取 MyBatis 的资源 该教程指出我的连接工厂中需要以下内容 String resource org mybatis example Configuration xml Reader reader Resources get
  • 如何更好地优化 iOS 上的网络?

    我在 GitHub 上创建了一个项目 以便我可以学习如何优化 iOS 应用程序的网络 我大量使用了块和 GCD 在观看 WWDC 2012 视频和过去几年的视频后 我了解到我可以使用 NSOperationQueue 做更多事情 具体来说