后台进程听变量变化?

时间:2015-09-29 12:01:53

标签: ios swift background-process nsoperationqueue

我是iOS的后台操作的新手,所以我想知道解决这个问题的最佳方法是什么:

我有来自一个Web服务#1的数据,需要在后台解析并发送到webservice#2。

我需要一个后台线程,它将监听存储来自webserivce#1的数据的数组中的更改,当它不为空时,线程将启动uploadOperation,它将处理数组并将处理后的数据发送到webservice#2 < / p>

从字面上看,我是如何看待它的: 我有 DataManager 类,由Singleton sharedInstance提供。

let sharedInstance = DataManager()

它有

public var data: [String]? {
    didSet {
        processData()
    }   
}

private var uploadToWebSerivice2Queue: NSOperationQueue?

private override init() {
    uploadToWebSerivice2Queue = NSOperationQueue()
    uploadToWebSerivice2Queue.maxConcurentOperations = 1
    getCachedAndNotSentDataFromDatabase()
}

private func getCachedAndNotSentDataFromDatabase() {
    data = ("string 1", "string 2", "string 3", "string 4")
}

private func processData() {

    while let lastElement = data!.removeLast {
        let processedData = process(lastElement)
        let uploadOperation = UploadOperation(processedData) // Data upload opeation
        uploadToWebSerivice2Queue!.addOperation(uploadOperation)
    }

}

如果在上次尝试期间无法将数据发送到Web服务#2,则某些数据可能来自数据库。并且一些数据可能来自运行时的webservice#1。

所以在其他课程中,我们称之为 Webservice1DataHandler ,我会这样做:

DataManager.sharedInstance.data.append("New string to process and upload to webservice#1")

总结一下, 首先在init()之后设置 var 数据 ,并且uploadQueue将开始处理该数据。然后,新字符串将附加到 var 数据 ,这意味着将调用 processData()方法,并且数据< / strong>可能会发生阵列访问。

我不确定我的算法是否正常。

0 个答案:

没有答案