使用 cocoa touch 测量 iPhone 上下载速度的最佳方法

2024-02-06

我正在制作一个应用程序,我想提供的功能之一是测量连接的下载速度。为了得到这个,我使用 NSURLConnection 开始下载一个大文件,并在一段时间后取消下载并进行计算(下载的数据/经过的时间)。 虽然其他应用程序(例如 speedtest.net)每次都提供恒定的速度,但我的应用程序或多或少波动 2-3 Mbps。

基本上我正在做的是,在调用方法connection:didReceiveResponse:时启动计时器。在调用方法 connect:didReceiveData: 500 次后,我取消下载,停止计时器并计算速度。

这是代码:

- (IBAction)startSpeedTest:(id)sender 
{
    limit = 0;
    NSURLRequest *testRequest = [NSURLRequest requestWithURL:self.selectedServer  cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];

    NSURLConnection *testConnection = [NSURLConnection connectionWithRequest:testRequest delegate:self];
    if(testConnection) {
        self.downloadData = [[NSMutableData alloc] init];
    } else {
        NSLog(@"Failled to connect");
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    self.startTime = [NSDate date];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.downloadData appendData:data];
    if (limit++ == 500) {
        [self.connection cancel];
        NSDate *stop = [NSDate date];
        [self calculateSpeedWithTime:[stop timeIntervalSinceDate:self.startTime]];
        self.connection = nil;
        self.downloadData = nil;
    }
}

我想知道是否有更好的方法来做到这一点。更好的算法,或者更好的类来使用。

Thanks.


一旦开始下载,捕获当前系统时间并将其存储为startTime。然后,您需要做的就是计算下载过程中任意时刻的数据传输速度。只需再次查看系统时间并将其用作currentTime计算到目前为止花费的总时间。

下载速度 = bytesTransferred / (当前时间 - 开始时间)

像这样:

static NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate];    
NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];
double downloadSpeed = totalBytesWritten / (currentTime - startTime);

您可以使用此方法NSURLConnectionDownloadDelegate:

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

使用 cocoa touch 测量 iPhone 上下载速度的最佳方法 的相关文章

  • 添加 AFNetworking 后出现 APPLE MACH-O 链接错误

    只是将 AFNetworking 添加到我的项目中 在 B R 后 我收到如下错误 Undefined symbols for architecture i386 SecCertificateCopyData referenced from
  • iPad Safari Web Inspector 在页面加载时崩溃

    我有一个用 WordPress 制作的以视频为中心的网站 当我们在 iPad 上测试网站时 我们将其连接到 Mac 笔记本电脑并打开 safari 开发人员工具来检查是否有任何错误等 我们的主页上一切正常 但当我们转到我们添加的任何视频帖子
  • 如何知道两个 NSDate 是否在同一天

    你知道如何知道两个NSDate是同一天 我想考虑到区域设置 使用a可能很容易timeIntervalSinceDate 但星期一 23H58 和星期二 00H01 不在同一天 处理NSDate和计算区域设置不是很容易 NSCalendar
  • “EXC_BAD_ACCESS”与“分段错误”。两者实际上相同吗?

    在我的前几个虚拟应用程序 用于学习时练习 中 我遇到了很多EXC BAD ACCESS 这以某种方式告诉我错误访问是 您正在触摸 访问一个不应该的对象 因为它尚未分配或释放 或者只是您无权访问它 查看此示例代码 该代码存在访问错误问题 因为
  • 如何计算CLLocationDistance的中心坐标

    我想计算我的位置和一些注释之间的中心点 到目前为止我已经这样做了 CLLocation myLoc self locMgr location MKPointAnnotation middleAnnotation locationV anno
  • 如何在 iPad 应用程序上禁用横向方向?

    我创建了一个全新的单视图 iOS 通用 Swift 应用程序 然后 我在应用程序设置中取消选中 横向左 和 横向右 我在 iPhone 上运行了它 万岁 无论我如何旋转手机 它都会保持纵向模式 然后我在 iPad 上运行它 它会旋转到任何内
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58
  • 旋转 GPUImageTiltShiftFilter - GPUImage

    我想要一个非水平 GPUImageTiltShiftFilter 旋转 我想将其旋转到任意旋转角度 我还希望过滤器速度快 可以通过带有 UIRotationGestureRecongizer 的 UI 进行旋转 我该怎么做呢 啊 想通了 不
  • 如何在 iOS 6 中强制 UIViewController 为纵向

    As the ShouldAutorotateToInterfaceOrientation在 iOS 6 中已弃用 我用它来强制特定视图仅肖像 在 iOS 6 中执行此操作的正确方法是什么 这仅适用于我的应用程序的一个区域 所有其他视图都可
  • iOS Twitter NSURLErrorDomain 代码=-1012

    我正在尝试通过在我的应用程序中注册 Twitter 来获取用户的联系方式 我发现this https github com malcommac DMTwitterOAuthgithub上的项目看起来非常好 我只遇到一个问题 如果我使用来自
  • Swift 错误:发出 SIGABRT 信号如何解决

    我只是 Swift 编码的初学者 我的想法很简单 就是一个有两个按钮的应用程序 单击时 文本字段将更改其文本 在 Main StoryBoard 中 我添加一个文本字段和两个按钮 在 ViewController swift 文件中 我这样
  • 如何在多个视图中显示相同的导航栏?

    我可以为一个视图重现以下导航栏 但是 一旦我单击按钮后移至下一个视图 我就会丢失最右边的两个图标 搜索 个人资料 据我所知 从故事板设置导航项目通常是按视图进行的 我可以为每个视图复制这些项目 但我想知道是否有更好的方法来完成一次 是否有教
  • 如何使用 MonoTouch 在 UIKeyboard 之上添加 UIToolbar?

    我按照 Obj C 中的示例进行操作定制 iPhone 键盘 https stackoverflow com questions 1610542 custom iphone keyboard 1612549 1612549但是 为了在 Wi
  • 使用 MPMoviePlayerViewController 时的 iPad 旋转错误

    问题摘要 使用 MPMoviePlayerViewController 播放视频时更改 iPad 设备或模拟器的方向会导致视频播放器关闭时旋转状态不一致 这是 iPad SDK 3 2 中的一个已知错误 记录于http www openra
  • AGVTool new-version 和 What-version 不对应

    当我做 agvtool new version all 99 它更新我的 Info plist 文件 但是 如果我这样做 agvtool what version or agvtool next version 我收到此错误 There d
  • iOS 开发:如何强制 UIWebView 加载 Facebook 的非移动版本?

    我正在深入研究 iOS 开发 当我尝试在 UIWebView 中加载特定的 Facebook 粉丝页面时 它会加载该网站的移动版本 该版本仅加载粉丝页面的墙 而不是我需要加载的特定选项卡 在我的应用程序的 iPad 版本中 UIWebVie
  • iOS 11 中的密码自动填充快速输入栏

    iOS 11 中引入了一项新功能 应用程序密码自动填充 此功能允许用户直接从键盘快速输入栏使用其应用程序中保存的密码 https techcrunch com 2017 06 08 ios 11s new password autofill
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐

  • 建议像 google 一样使用 postgresql trigrams 和全文搜索

    我想做一个文本搜索 我在用着PostgreSQL http www postgresql org 因为神奇的Postgis http postgis refractions net 我正在考虑使用FTS http www postgresq
  • Aarch64 上 C++11 原子的部分重新排序

    我正在看gcc 的 rmw 原子的编译器输出 https goo gl ZWLeCJ并注意到一些奇怪的事情 在 Aarch64 上 诸如 fetch add 之类的 rmw 操作可以通过宽松的负载进行部分重新排序 在 Aarch64 上 可
  • 获取磁盘上文件的所有者

    下面是我当前的宏 它运行得很好 但我想在 Cells r 10 中添加文件的所有者 这样的事情怎么可能完成呢 我找不到像 File Owner 之类的命令 Sub DoFolder Folder If Ans vbNo Then GoTo
  • Elasticsearch - 匹配字符串或空值

    我必须检查某个字段是否与特定文本匹配或为空 可以这样做吗 谢谢 您可以通过使用来实现这一点missing http www elasticsearch org guide en elasticsearch reference current
  • TypeScript 接口数组类型错误 TS2411

    我很难理解这一点 支持的索引类型有两种 字符串和数字 可以支持两种类型的索引 但限制是从数字索引返回的类型必须是从字符串索引返回的类型的子类型 虽然索引签名是描述数组和 字典 模式的强大方法 但它们还强制所有属性与其返回类型相匹配 在此示例
  • Android WebRTC 中的本地视频渲染器

    我正在使用这个库 https bintray com google webrtc google webrtc https bintray com google webrtc google webrtc 我想要实现的目标 至少在我的项目开始时
  • 共享库如何知道它所在的位置?

    我正在为 Linux 机器开发一个共享库 它是通过 rpath 相对于主可执行文件动态加载的 现在 库本身尝试相对于其位置动态加载其他库 但没有 rpath 我使用 scandir 来搜索某个文件夹中的共享库 我还不知道它们的名称 仅当工作
  • 正则表达式匹配不包含任何超过 10 个字符的单词的字符串?

    S 10 我有一个正则表达式 它将匹配任何包含 10 个字符的单词的字符串 然而我需要它的反面 一个正则表达式 仅匹配不包含 gt 10 个字符的单词的字符串 使用否定断言 S 10 S 10 匹配 10 的序列 S 它必须是更长的子序列
  • Spring:如何将属性文件中的值传递给构造函数

    我有一个MongoService类为 public class MongoService private final Mongo mongo private final String database private static fina
  • 我想在 SwiftUI 中的 TextField 添加 $ 符号

    Hi I want to add sign to a TextField when a user is typing 这是我当前的代码 ZStack alignment leading if price isEmpty Text Enter
  • fftw c2c:转换后的真实数据中缺少对称性

    最近我遇到了一些关于fftw的使用及其c2c转换的问题 参见 3d c2c fft 与 fftw 库 https stackoverflow com questions 10374656 3d c2c fft with fftw libra
  • 特征向量变换的差异:Mathematica 与 SciPy

    类似的问题之前曾在这里被问过 但似乎没有人回答我的例子 我使用 Mathematica 和 SciPy 计算矩阵 A 的特征值和特征向量 特征值一致 但特征向量则不然 1 最低 特征值 特征向量一致 2 Mathematica 和 SciP
  • Python3解析xml

    我尝试使用不同的 python3 模块和互联网上的不同文章来解析 XML 但没有成功 我有这个 XML
  • bootstrap 3 - 如何将品牌放置在导航栏的中心?

    我正在使用 Bootstrap 3 我想要一个仅包含品牌的导航栏 没有其他链接或任何其他内容 我希望品牌位于中心 我怎样才能做到这一点 以下 CSS 不起作用 navbar brand text align center css navba
  • Firebase 运行循环中未捕获的异常 (3.0.0)

    我正在使用最新的 firebase 9 0 2 build gradle dependencies compile com google firebase firebase database 9 0 2 compile com google
  • opencv中的错误 - python3 (detectMultiScale) 人脸识别

    我正在尝试创建一个人脸检测程序 当我执行以下代码时 import numpy as np import cv2 face cascade cv2 CascadeClassifier Practica Proyectos Practica O
  • 甜甜圈缓存 ASP.NET MVC2

    是否有可能使用 MVC2 进行甜甜圈缓存 即使进行了大量研究 我也无法找到可行的解决方案 甜甜圈缓存不适用于 ASP NET MVC 2 请参阅http forums asp net t 1521502 aspx http forums a
  • MongoDB-转义点 '.'在地图键中]

    产品的地图键代码包含点 但未配置替换 首先确保地图键不包含点或配置适当的替换 org springframework data mapping model MappingException 地图键 foo bar key 包含点 但未配置替
  • 无法运行 aapt dump badging - Google Play 商店

    我无法将我的应用程序上传到 Play 商店 当我上传 file apk 时 收到此错误 无法运行 aapt dump badging W ResourceType 17873 错误的 XML 块 标头大小 28024 或总大小 170224
  • 使用 cocoa touch 测量 iPhone 上下载速度的最佳方法

    我正在制作一个应用程序 我想提供的功能之一是测量连接的下载速度 为了得到这个 我使用 NSURLConnection 开始下载一个大文件 并在一段时间后取消下载并进行计算 下载的数据 经过的时间 虽然其他应用程序 例如 speedtest