Swift 中的 HTTP 长轮询

2024-01-20

我正在尝试使用 iOS 8+ 在 Swift 中实现长轮询解决方案。

虽然该解决方案无疑有效,并且让主线程可以自由进行 UI 交互,但内存使用量不断攀升,所以我显然做错了一些事情。我写的类如下:

enum LongPollError:ErrorType{
    case IncorrectlyFormattedUrl
    case HttpError
}

public class LongPollingRequest: NSObject {
    var GlobalUserInitiatedQueue: dispatch_queue_t {
        return dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.rawValue), 0)
    }

    var GlobalBackgroundQueue: dispatch_queue_t {
        return dispatch_get_global_queue(Int(QOS_CLASS_BACKGROUND.rawValue), 0)
    }

    var longPollDelegate: LongPollingDelegate
    var request: NSURLRequest?

    init(delegate:LongPollingDelegate){
        longPollDelegate = delegate
    }

    public func poll(endpointUrl:String) throws -> Void{
        let url = NSURL(string: endpointUrl)
        if(url == nil){
            throw LongPollError.IncorrectlyFormattedUrl
        }
        request = NSURLRequest(URL: url!)
        poll()
    }

    private func poll(){
        dispatch_async(GlobalBackgroundQueue) {
            self.longPoll()
        }
    }

    private func longPoll() -> Void{
        autoreleasepool{
            do{
                let urlSession = NSURLSession.sharedSession()
                let dataTask = urlSession.dataTaskWithRequest(self.request!, completionHandler: {
                    (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
                    if( error == nil ) {
                        self.longPollDelegate.dataReceived(data)
                        self.poll()
                    } else {
                        self.longPollDelegate.errorReceived()
                    }
                })
                dataTask.resume()
            }
        }
    }
}

我尝试在 Instruments 中分析该应用程序,但结果令人困惑。我希望有人能指出我正确的方向。

Thanks


LongPollDelegate 很强大,因此您有一个保留周期。使其成为弱变量。

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

Swift 中的 HTTP 长轮询 的相关文章

  • 迭代 NSDictionary 时保持顺序

    我有一个 NSDictionary 它正在迭代并将数据保存到核心数据 如下所示 NSDictionary details valueDict objectForKey shipment master for NSDictionary res
  • Cordova iOS 自定义插件:处理内存警告

    我正在开发一个使用 cordova 2 1 和一些自定义插件的 iOS 应用程序 我试图面对的问题如下 当我展示我的插件时 基本上是一个比内置插件具有更多功能的相机插件 cordova 插件 有时我会收到内存警告并随后卸载 包含 web 视
  • Objective-c 截断字符串并在末尾添加省略号

    如何在 Objective C 中截断字符串 然后在末尾添加省略号 NSString origString A very long string blah blah blah const int clipLength 18 if origS
  • 越狱后,iOS应用程序会以root权限运行吗?

    一旦 iOS 设备越狱 我们就可以构建越狱应用程序 使用 theos 并将其安装在 Applications预加载应用程序以 root 权限运行的目录 如果应用程序是使用 Xcode 构建的 一旦安装 它就会进入 private var m
  • 如何解决这个错误? - 类“ViewController”没有初始化程序

    我创造了UILabel快速编程 但它给了我以下错误 类 ViewController 没有初始值设定项 Code class ViewController UIViewController let lbl LastName UILabel
  • Objective C 中最好的多线程方法?

    我正在开发一个 iPad 应用程序 目前正在努力寻找多线程的最佳方法 让我用一个简化的例子来说明这一点 我有一个包含 2 个子视图的视图 一个目录选择器和一个包含所选目录中所有图像缩略图的图库 由于 下载 和生成这些缩略图可能需要相当长的时
  • swift 4 - HMCharacteristicTypeSerialNumber 已弃用

    我想阅读输入的配件信息HMAccessory 例如序列号 HMCharacteristicTypeSerialNumber 制造商 HMCharacteristicTypeManufacturer 模型 HMCharacteristicTy
  • 越狱的 iOS 从后台应用程序截图

    我正在为自己构建一个实用程序应用程序 当该实用程序在后台运行时 它可以截取前台运行的任何内容的屏幕截图 该实用程序将在越狱设备上运行 因此它可以访问私有 API 而不受沙箱的限制 由于实用程序应用程序在后台运行 作为守护程序或使用后台程序
  • 为什么 Xcode 会为选择器列出自动完成方法?

    自从我升级到最新的 Xcode 以来 自动完成功能就列出了 删除线 方法selector目的 我无法判断这是 Xcode 的错误还是有一些我不知道的新语法更改 如果你把它插入你的 Playground 并删除里面的方法 selector t
  • 在iOS上模仿截图flash动画

    我正在寻找一种复制按 home lock 时播放的 闪烁 动画的方法 有谁知道这个动画是否可用 在 iOS 设备上 当您按下 home lock 并且屏幕闪烁白色时 您会截取屏幕截图 你说的是这个效果吗 如果是这样 请尝试以下操作 Add
  • 如何设置 NSUserDefault Key 的初始值?

    我想为 NSUserDefault 键设置一些初始值 以便应用程序的第一次运行具有一些合理的初始设置 我以为我在应用程序包 plist 中遇到了一种简单的方法来执行此操作 但现在我找不到它 有任何想法吗 您应该使用registerDefau
  • 如何强制重装iOS模拟器?

    我想下载模拟器组件 Xcode 6 2 但在下载过程中我的互联网连接丢失了 Xcode 仍然显示我已经安装了 7 1 模拟器 你知道如何强制重装iOS模拟器吗 我已完成以下步骤 从 Library Caches com apple dt X
  • 如何从应用程序扩展启动父 iOS 应用程序

    有谁知道如何从应用程序扩展的视图控制器启动父应用程序 我只想从其应用程序扩展启动主应用程序 在 WWDC 会议上为 iOS 和 OS X 创建扩展 第 1 部分 https developer apple com videos wwdc 2
  • 模态转换风格就像邮件应用程序中一样

    我试图实现模态呈现效果 其中呈现的视图仅部分覆盖父视图 如下图所示 我知道我可以通过使用实现自定义转换来实现这一点UIPresentationController 我不想重新发明轮子 所以在继续开发之前我想问一下 API 中是否有对这种转换
  • 使用 'vendored_frameworks' 和 'source_files' 对于 cocoapod 使用 'use_frameworks!'

    我正在构建一个 cocoapod 它基本上包含一个框架 私有源 和一个依赖于该框架的视图 开源 所有这些都是用 Objective C 制作的 在 podspec 中我有以下几行 spec vendored frameworks MyPod
  • 在 Swift 中删除字符串中第一个字符的最简洁方法是什么?

    我想删除字符串中的第一个字符 到目前为止 我想到的最简洁的事情是 display text display text substringFromIndex advance display text startIndex 1 我知道我们不能用
  • 如何捕获 UITableView / UIScrollView 完整内容的 UIImage 并使其在 ios 设备上工作

    我正在使用这段非常优雅的代码获取 UIScrollView 的屏幕截图 包括屏幕外部分 https stackoverflow com questions 3539717 getting a screenshot of a uiscroll
  • “UITableView”类型的值没有成员“sectionHeaderTopPadding”

    为什么我在 Xcode 12 4 模拟器 ios 14 x 中收到以下代码的构建错误 if available iOS 15 0 myTableView sectionHeaderTopPadding 0 0 error here 错误是
  • 使用 Objective-C 将 XMP 数据嵌入到 PNG

    我需要将自定义 XMP 文件嵌入到 iOS 应用程序中的 PNG 中 到目前为止 我能做的就是编译 Adob e XMP 工具包 生成 Xcode 项目 然后正确编译该项目 从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它
  • 捆绑 pathsForResourcesOfType:inDirectory:

    在我的应用程序中 我有很多图片 分为几个类别 以下是项目内和我的硬盘上的应用程序树 ApplicationName Resources Thumbs Images Buttons Default png 在拇指文件夹中 我有很多 png 文

随机推荐

  • Android 上的 ORMLite 不调用 onCreate

    使用 ORMLite v 4 40 我尝试让我的应用程序运行 但它似乎忽略了 onCreate 函数 我的 DatabaseHelper 看起来像这样 片段样式 public class ORMLiteHelper extends OrmL
  • 动态创建函数/子程序的 AutoHotkey 热键

    自动热键命令Hotkey允许在运行时创建动态热键 但其语法和文档似乎将其限制为内置或现有标签 子例程 这使得much不太有用 热键 键名 标签 选项 有没有办法让它像常规的硬编码热键一样工作 例如 z MsgBox foobar Typic
  • SQL:显示标准差内的平均值和最小值/最大值

    我有以下 SQL 表 Date StoreNo Sales 23 4 34 4323 00 23 4 23 564 00 24 4 34 2345 00 etc 我正在运行一个查询 返回特定时间段内的平均销售额 最大销售额和最小销售额 se
  • Intellij IDEA:找不到“JdbcTemplate”类型的bean

    Intellij IDEA 15 0 3 表示 JdbcTemplate bean 不存在 这是一个 Spring Boot 项目 因此所有需要的 bean 都应该在 boot 内部创建 它工作正常 我可以与我的数据库交互 但 IDEA 将
  • 用于运行 DiskPart 的批处理文件

    我正在尝试开发一个批处理文件来运行并删除 Windows 7 中的隐藏分区 当尝试删除所有分区时 通常我在命令提示符窗口中逐行执行此操作 但试图找出如何创建批处理文件来运行并加快此过程 以下是我在命令提示符下键入的行 disk part R
  • 终结器在其对象仍在使用时启动

    Summary C NET 应该被垃圾收集 C 有一个析构函数 用于清理资源 当对象 A 在我尝试克隆其变量成员之一的同一行被垃圾回收时会发生什么 显然 在多处理器上 有时垃圾收集器会获胜 问题 今天 在 C 培训课程中 老师向我们展示了一
  • 程序化屏幕截图歪曲了最近邻居

    我遇到了屏幕截图 以编程方式使用下面的代码 与图像放大 在我的情况下非常远 并渲染最近邻以保留硬边缘时屏幕上实际显示的内容之间的不一致 我从这些论坛获得了以下屏幕截图代码 但保存的是图像的 双线性 渲染而不是最近邻 UIGraphicsBe
  • 如何在postgresql中将bigint(以毫秒为单位的时间戳)值写入为时间戳

    我试图将我的值存储在带有时区字段的时间戳中 从 1970 年开始以毫秒为单位 select TO CHAR TO TIMESTAMP 1401432881230 DD MM YYYY HH24 MI SS MS 预期的30 5 2014 1
  • 实体框架 - 只有 edmx,没有模板

    我们只想添加 EDMX 文件 而不添加上下文和实体的相应 tt 文件 造成这种情况的原因有多种 但长话短说 我们希望能够拥有 EDMX 并能够在需要时从数据库刷新它 目前 如果我每次 从数据库更新 时删除 tt 文件 它将重新生成我们不需要
  • C# 中的互斥量和信号量是什么?我们需要在哪里实施? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 C 中的互斥量和信号量是什么 我们需要在哪里实施 我们如何在多线程中使用它们 您应该从 MSDN 开始 系统 线程 互斥体 http
  • Paypal Recurring Gem - 暂停付款

    我正在寻找为贝宝经常性宝石 跟随 Rails Cast 设置付款暂停 我不确定是否需要设置 IPN 因为 gem 的文档中没有提及它 我目前拥有的代码不执行任何操作 我在模型中定义了取消重复 但我不确定如何完成代码 因为我很难理解这一切是如
  • 更新 python 包后出现“InvalidRequirement:无效需求,解析错误”错误

    使用更新包 在我的例子中是 IPython 后pip install U ipython运行任何使用入口点的 Python 脚本都会失败并出现以下错误 Traceback most recent call last File home ad
  • 错误:系列的真值不明确 - Python pandas [重复]

    这个问题在这里已经有答案了 我知道这个问题之前已经被问过 但是 当我尝试做一个if声明 我收到错误 我看了这个link https stackoverflow com questions 36921951 truth value of a
  • psql:服务器不支持 SSL,但需要 SSL

    尝试使用命令提示符连接到 postgresql 服务器 使用的命令 psql sslmode require host localhost dbname test 抛出错误 psql 服务器不支持 SSL 但需要 SSL 请帮我解决这个问题
  • 使用 Kotlin 在 Android 应用程序中打开文件选择器

    任务 上传用户可以从设备中选择的图像 我怎样才能打开文件选择器 https en wikipedia org wiki File dialog使用 Kotlin 在 Android 应用程序中按下按钮时出现窗口 在您的活动中 添加按钮单击以
  • WAN 上的 TCP/UDP 套接字服务器

    我用 C 编写了一个套接字服务器 它将用作我参与的一个小型游戏项目的基本设计 套接字服务器在局域网上工作正常 我能够在服务器和客户端之间完全正常通信 然而 在 WAN 上 服务器从客户端接收到所有正确的消息 但客户端没有从服务器接收到任何消
  • 本地化可点击跨度 Android

    我在我的应用程序中使用本地化 english indonesia 然后在活动中我写 class MainActivity AppCompatActivity private lateinit var binding ActivityMain
  • 将 .jar 转换为适用于 Windows、Linux 和 Mac 的应用程序

    我用 Eclipse 制作了一个 Java 应用程序 导出为 jar 我想将其导出到 Windows exe Linux 和MAC 我没有任何 Linux 或 MAC 机器 所以我不知道每台机器都需要什么扩展文件 所以我有几个问题 对于 W
  • 如何使用 Glide v4.0.0RC1 将图像从 Url 加载到 ImageView 中

    我刚刚在我的应用程序中将 Glide 库从 v3 更新到了 v4 但现在我无法从 url 加载图像 以前它在 v3 上工作得很好 这是我的滑行代码 Glide with context load galleryList get itemPo
  • Swift 中的 HTTP 长轮询

    我正在尝试使用 iOS 8 在 Swift 中实现长轮询解决方案 虽然该解决方案无疑有效 并且让主线程可以自由进行 UI 交互 但内存使用量不断攀升 所以我显然做错了一些事情 我写的类如下 enum LongPollError ErrorT