进行网络通话的最佳地点

2023-11-23

网络通话:-

   static func getProfile(parameters:[String:AnyObject], onComplete:[String:AnyObject]->()) {

        var requiredData:[String:AnyObject] = [:]

        Alamofire.request(.GET,API.getProfile,parameters: parameters).validate().responseJSON { (response) in
            if let responseData = response.result.value {
                if let jsonData = responseData as? [String:AnyObject] {
                    requiredData["UserName"] = jsonData["UName"]
                    requiredData["UserEmail"] = jsonData["UEmail"]
                    requiredData["UserMobileNo"] = jsonData["UPhone"]
                    requiredData["UserAddress"] = jsonData["UAddress"]
                    requiredData["UserCity"] = jsonData["UCity"]
                }// Inner If

            } // Main if
            onComplete(requiredData)
        }// Alamofire Closed

    }// Func closed

所需 VC 内的网络调用:-

 override func viewDidLoad() {
        super.viewDidLoad()
        let parameters:[String:AnyObject] = [
            "WebKey": API.WebKey.value.rawValue,
            "UId":NSUserDefaults.standardUserDefaults().integerForKey("UserId")
        ]
        NetworkInterface.getProfile(parameters) { (responseDictionary) in
            //print("Passed Data \(responseDictionary["UserName"])")
            self.userData = responseDictionary
            self.updateUI()
        }

    }

据我所知,VC 生命周期大致如下:-

init(编码器aDecoder:NSCoder) -> viewDidLoad -> viewWillAppear -> viewWillDisappear

然而,即使在视图出现后,用户信息也需要几秒钟的时间才能显示在这些文本字段中。我认为 viewDidLoad 是进行网络调用的最佳场所。

我知道网络调用是异步的,因此需要时间从网络获取所需的数据并做出响应。但是,网络调用是在 viewDidLoad 中进行的,因此当视图出现时,它应该已经有了所需的数据?不应该吗?

那么谁能解释一下哪个是进行网络调用的最佳位置以及为什么?我希望在视图出现时立即使用用户信息更新文本字段。


请求需要在viewWillAppear:,只有这个方法会通知您屏幕即将显示。如果您不想每次显示屏幕时都发送请求,请考虑在获得数据后缓存数据。

viewDidLoad不是最佳人选。它与屏幕的外观无关。它在第一次请求视图控制器的视图后立即调用,而不是在屏幕显示时调用。

例如,如果屏幕被破坏(通过从导航控制器弹出),您将收到viewDidLoad当您再次显示它时(通过将屏幕推到导航控制器)。或者,如果应用程序收到内存警告,则会卸载并再次加载当前视图,最终发送视图控制器viewDidLoad.

viewDidLoad很棘手。

如果你这么认为viewDidLoad将使您免于多次从服务器获取数据:有时会,有时不会。不管怎样,它不是优化网络的正确工具,缓存才是!

由于远程请求的成本很高(它们需要时间和流量),因此您需要了解它们何时发送。viewWillAppear:给你理解。结合缓存,您可以使其达到最佳状态。

UPDATE

在大多数情况下,直接从视图控制器发送请求并不是一个好主意。我建议创建一个单独的网络层。

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

进行网络通话的最佳地点 的相关文章

  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • iOS uiwebview 在 WebThread 中崩溃

    我正在寻求一些建议或帮助诊断我所看到的这次崩溃 目前 我认为这可能是一个 webkit 错误 但一切皆有可能 因此请提供您可能有的任何见解 Incident Identifier AEB8EE37 E5D4 4975 97F4 2B2038
  • UITesting、XCTest 当前 ViewController 类

    简单的问题 我有一个按钮可以执行到下一个视图控制器的操作 我想写 UI XCTest 来告诉我它是否打开了我想要的视图控制器 UI 测试框架无法访问您的应用程序代码 这使得无法对实例进行类断言 你不能够directly告诉屏幕上的控制器的类
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • SceneKit unproject Z 文档解释?

    我正在经历一些 SceneKit 概念 而我试图在脑海中巩固的一个概念是 unprojectPoint 我知道该函数将获取 2D 中的一个点并返回 3D 中的一个点 因此具有正确的 Z 值 当我阅读文档时 我读到了以下内容 method u
  • 保存来自 TrueDepth 相机的深度图像

    我正在尝试保存 iPhone X TrueDepth 相机的深度图像 使用AVCam照片滤镜 https developer apple com library content samplecode AVCamPhotoFilter Lis
  • 如何解决 iOS 6 SDK 中的 hidesBottomBarWhenPushed 行为异常的问题?

    我遇到了中描述的相同问题这个 OpenRadar 问题 http www openradar me 14670329 正如那里所说 摘要 UIViewController的hidesBottomBarWhenPushed属性 对于使用 iO
  • iOS Swift 在后台下载大量小文件

    在我的应用程序中 我需要下载具有以下要求的文件 下载大量 例如 3000 个 小 PNG 文件 例如 5KB 逐个 如果应用程序在后台继续下载 如果图像下载失败 通常是因为互联网连接丢失 请等待 X 秒然后重试 如果失败Y次 则认为下载失败
  • 是否可以使用UIPageControl来控制UITableView的移动?

    从Apple示例 PageControl 中我们可以知道UIPageControl可以用来控制scrollview中页面的移动 由于 UITableView 是 UIScrollView 的子类 我想使用 UIPageControl 来控制
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • 循环多个 UIAlertController

    在某些情况下 我的应用程序需要显示多个警报消息 错误消息在启动时收集 并且需要一次向用户显示一条 当第一个被确认后 应该呈现下一个 问题在于 显然 它们都试图同时执行 有没有一种聪明的方法可以同步执行此操作 这是一些简单描述我想要做的事情的
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • iOS Swift 和 reloadRowsAtIndexPaths 编译错误

    我与 xCode Swift 陷入僵局并刷新 UITableView 的单行 这条线有效 self tableView reloadData 而这条线没有 self tableView reloadRowsAtIndexPaths curr
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • 无需越狱即可检测iOS9上哪个应用程序处于前台

    我正在尝试记录用户在 iOS9 上的个人应用程序使用情况 我宁愿它不会使用越狱有限的解决方案 不言自明 在越狱手机上执行此应用程序的变体应该不难 https www andyibanez com create mobilesubstrate

随机推荐

  • Ionic 2:使用 Cordova 插件

    我做了很多谷歌搜索 但似乎无法找到太多答案 在 Ionic 2 中调用 Cordova 插件的语法是如何工作的 例如 在 Ionic 1 中 我正在使用 Facebook 插件 我会这样称呼它 cordovaFacebook login p
  • 按字母顺序对选择菜单进行排序?

    我有以下选择菜单 jsFiddle
  • Hive解释计划理解

    是否有任何适当的资源可以让我们完全理解 hive 生成 的解释计划 我尝试在 wiki 中搜索它 但找不到完整的指南来理解它 这是 wiki 它简要解释了解释计划的工作原理 但我需要有关如何推断解释计划的更多信息 https cwiki a
  • 如何将日期作为 URL 参数传递

    我正在使用钛通过网络服务为特定的网络应用程序创建一些应用程序 这里我将日期作为 URL 参数传递来调用 java 中的特定 webservice 方法 日期格式如下 2015 02 04T05 10 58 05 30 在java服务方法中
  • PHP从具有关系数据的数组创建多维数组[重复]

    这个问题在这里已经有答案了 可能的重复 根据父 ID 值将数组从一维转换为多维 我正在 PHP 工作 我有以下包含关系数据 父子关系 的数组 Array 5273 gt Array id gt 5273 name gt John Doe p
  • 如何像在浏览器中一样在vscode中打开HTML文件?

    vscode 或任何扩展更新完成后 vscode 中将显示发行说明 我可以在我的电脑中找到releasenote 它是HTML文件 我通过vscode打开它 vscode显示HTML代码 不喜欢通过浏览器打开 一般来说 我想在vscode而
  • OpenGL 顶点缓冲区绑定点可以在不同的 VAO 之间重用吗?

    假设我使用新的 从 OpenGL 4 3 开始 glBindVertexBuffer 机制设置了两个 VAO glGenVertexArrays 1 vaoIndex0 glGenVertexArrays 1 vaoIndex1 glBin
  • 如何在 PHP 中获取浮点数的二进制表示?

    有没有办法在 PHP 中获取浮点数的二进制表示形式 类似于 Java 的东西Double doubleToRawLongBits 给定一个正浮点数 我想获得小于该数字的最大可表示浮点数 在Java中 我可以这样做 double x Doub
  • 我应该如何将文件加载到我的 Java 应用程序中?

    我应该如何将文件加载到我的 Java 应用程序中 简短的回答 使用以下两种方法之一 Class getResource String Class getResourceAsStream String 例如 InputStream input
  • 在 Snap.svg 图形上设置 ID 属性

    我在用着Snap svgAPI 和我需要在 CSS 中选择三个图形以用于样式设计 因此 为了区分它们 我需要给它们一个 ID 或类名 这就是我创建元素的方式 var draw Snap 100 75 c draw polyline 0 0
  • Java Nio绝对路径到相对路径

    我有一个指向磁盘上文件的路径 例如 C folder dir dir2 file txt 在代码中 如果在使用该文件时抛出异常 它将输出整个路径 理想情况下 最好不要打印整个目录 而是像这样 dir2 file txt 看来我应该能够做到这
  • 如何监控ActiveMQ Artemis

    我正在 Windows NET 环境中使用 RabbitMQ ActiveMQ Classic 和 ActiveMQ Artemis 进行一些测试 RabbitMQ 和 ActiveMQ 经典 附带一个 Web 界面 您可以在其中查看有关代
  • 除 na.rm= TRUE 外,mean 还返回 NaN

    样本数据 date coins 2013 10 01 NA 2013 10 01 NA 2013 10 01 NA 2013 11 01 10 2013 11 01 NA 2013 11 01 20 2013 11 01 30 2013 1
  • jQuery UI 使用 .droppable 放入 div 时删除元素

    我正在尝试找出如何做到这一点的逻辑 我有很多只有 CSS 类名的图像 它们是动态创建的 这些图像可以使用 jQuery UI 进行拖动 draggable 我需要一个 垃圾桶 当将元素拖入 时 它会被删除 Example http jsfi
  • 如何在 AngularJS 中设置动态模型名称?

    我想用一些动态问题填充表单 小提琴here div ul li div question Text div li ul div
  • CodeIgniter 中的联接查询[重复]

    这个问题在这里已经有答案了 我在 CodeIgniter 中使用联接查询 但无法使其工作 它只显示一个表数据 而不显示另一表数据 我是 CodeIgniter 的新手 无法弄清楚这一点 请有人帮助我 提前Tnanks view br br
  • 保证复制省略的行为是否取决于用户定义的复制构造函数的存在?

    无论有或没有用户定义的复制构造函数 以下代码的行为都不同在 GCC 8 0 1 下 include
  • django [Errno 2] 没有这样的文件或目录:

    我已经构建了一个脚本来读取 Excel 文件并将内容保存到我的数据库中 注意 文件和脚本位于不同的目录中 然而 当我尝试从views py中执行脚本作为简单导入时 django会抛出一个错误 指出它找不到文件或目录 Errno 2 No s
  • 积分推广

    在整数提升方面 什么时候有符号整数无法表示原始类型的所有值 来自文本 K R C 编程语言 第二版 p 174 A 6 1 积分推广 字符 短整数或整数位域 无论是否有符号 或枚举类型的对象都可以在 凡是可以使用整数的表达式 如果一个int
  • 进行网络通话的最佳地点

    网络通话 static func getProfile parameters String AnyObject onComplete String AnyObject gt var requiredData String AnyObject