我有一个应用程序需要使用 API 将多个实体类型与后端同步。
为此,我为每个 HTTP 方法(GET/POST/PUT/DELETE => 4 个操作)创建了 NSOperation 的子类。对于给定的实体,这些操作必须按特定顺序运行,因此我创建了第 5 个操作子类,其中包含同步序列(基本上是一个按适当顺序创建多个 GET/POST/PUT/DELETE 操作并添加这些操作的操作到由操作创建的队列。)。
因为我希望能够根据用户的连接以及某些类型实体之间的依赖关系(例如我需要完成“用户”同步,然后才能同时开始“事件”和“任务”同步)我使用一个 NSOperationQueue,它只包含同步类型的 NSOperations。
总结一下,如果我对每种类型的对象进行了 1 次更改(1 次创建,1 次更新,...),并且我想同步所有内容。我将有 1 个 NSOperationQueue,其中包含 3 个 NSOperation(每种类型的对象 1 个),每个 NSOperation 将有自己的 NSOperationQueue 应该运行 4 个 NSOperation(每种更改类型 1 个)。
现在问题来了:
1st/“子操作”正在使用异步 NSURLConnection,我不知道应该如何配置 NSURLConnection?
我应该使用这样的东西:
connection = [[NSURLConnection alloc] initWithRequest: theRequest delegate: self startImmediately: NO];
NSRunLoop * currentRunLoop = [NSRunLoop currentRunLoop];
[currentRunLoop addPort: [NSPort port] forMode: NSDefaultRunLoopMode];
[connection scheduleInRunLoop: currentRunLoop forMode: NSDefaultRunLoopMode];
[connection start];
[currentRunLoop run];
或者我应该使用它:
while (!finished)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
第二/目前我正在覆盖操作的启动,因为当我只有 1 个操作时,我希望能够在不使用 NSOperationQueue 的情况下启动它们。这是对的吗 ?如果是,是否有启动方法实现的示例?
第三/关于运行循环和线程,每个操作总是会得到不同的运行循环和线程?如果我覆盖它,这个线程/运行循环管理必须在 start 方法中处理吗?
4th /像我一样使用队列是否有问题(我认为在我的情况下这是合理的)?