我是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>可能会发生阵列访问。
我不确定我的算法是否正常。