ios - 主线程与后台线程上的 CompletionHandler 行为
问题描述
使用方法的线程在完成处理程序方面是否重要?在主线程上运行时,我没有问题;(data) in
完成处理程序被调用,因此函数的完成处理程序在其中。
以下是我的代码:
static func getInfo(user: User,completion: (([String:String]) -> Void)? = nil){
print(user.apiUid)
var enrolledCourses: [String:String] = [:]
NetworkingManager.staticGeneralRequest(withEndpoint: someURL, oauthToken: user.oauth_token, oauthTokenSecret: user.oauth_token_secret) { (data) in
let decodedData: [String:String] = data.getData()
completion?(decodedData)
}
}
//NOTE: According to the compiler,
//the use of an optional completionHandler means that it's `@escaping` by default.
这是线程处理的问题吗?有哪些最佳实践可以确保代码跨线程运行良好?
解决方案
在您收到响应之前,您的关闭已被解除分配。@escaping
像这样添加:static func getInfo(user: User, completion: @escaping (([String:String]) -> Void)? = nil)
将其保持在范围内。
推荐阅读
- jquery - 无法加载资源和状态文本是 ajax jquery 中的错误
- asp.net - 无法将当前 JSON 数组反序列化为类型模型,因为该类型需要 JSON 对象才能正确反序列化
- python - 如何以三列关系从 SQLAlchemy ORM 中检索正确的对象?
- python - 嗨,当测试包含 os.path.join() 时,我遇到了 runner.invoke() 的问题
- handlebars.js - 像应用程序一样的 vue 中的车把编译错误:期望 'ID',得到 'INVALID'
- python - 如何单击包含带有 seleniumbase 的文本的元素?
- mysql - mysql迁移工具包>>客户端不支持服务器请求的认证协议;考虑升级MySQL客户端报错
- wordpress - 在 Wordpress Woocommerce 网站中集成 Shipping API
- android - 如何使用错误消息查找属性的 id
- android - 在 FireStore Ui Recycler Paging Adapter 中使用 Paging 3 时出错:PagingConfig 无法转换为 Config