【问题标题】:Object passed by reference will not exist. Swift通过引用传递的对象将不存在。迅速
【发布时间】:2015-06-18 18:45:23
【问题描述】:

我有一个数组。

var array:[customType] = [] // pseudo code

func Generate_New_Array(){
    //initialization of generatedNewArray
    array = generatedNewArray
    for (index,element) in array{
         async_process({
         Update_Data_From_Web(&array[index])
         })
    }
    })
}

func Update_Data_From_Web(inout object:customType){
     download_process{
          object = downloadedData
     }
} 

问题是,如果我在 Update_Data_From_Web 为每个元素完成之前调用 Generate_New_Array,我该怎么办。它们会将值存储回数组中不存在的索引。如何避免这样的问题。

【问题讨论】:

    标签: ios swift reference pass-by-reference


    【解决方案1】:

    你有几个选择:

    1. 使Generate_New_Array进程可取消,然后在启动新进程之前取消旧进程。

    2. 使Generate_New_Array 序列化,这样当您对该方法进行后续调用时,它将首先完成调用。例如,您可以让这个入队对串行队列进行操作。

    无论您采用哪种方法,如果这是多线程代码,请确保您与模型对象的交互同步(通过 GCD 队列或锁等)。

    【讨论】:

    • 非常感谢您的回答,问题是我不确定如何停止异步请求,因为它是BaaS提供的api(并且没有取消查询方法)。有什么方法可以跟踪线程名称以终止它?
    • 不,如果他们不提供取消 API,那么您就无法安全地取消它。但是您的示例表明您正在创建一堆单独的请求,因此假设控制并发程度是有意义的(例如,如果您有 100 个请求,但一次只能合理运行 5 个,您可以设置模式,以便您最多只需要等待五个当前完成而不是等待全部 100 个)。如果没有有关您调用的 API 的更多详细信息,很难提供进一步的建议。
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2012-07-07
    相关资源
    最近更新 更多