0

我有一个 CONNECT 对象,它使用以下命令进行 HTTP 调用:

NSURLConnection* connection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];

在该- (void)connectionDidFinishLoading:(NSURLConnection*)connection方法中,我将内容写入文件。

我可能从多个 CONNECT 对象实例发送了多个 HTTP 调用,因此我认为这些 CONNECT 对象存在连接结束时同时写入文件的风险。

它是否正确 ?如果是,我该如何防止这种情况?

4

2 回答 2

1

如果您只有一个线程,那么不会有任何问题,因为委托将在同一个线程上执行。
委托在单线程环境中一个接一个地执行。当您的 DelegateMehtod1 正在访问文件并且由于 DelegateMehtod2 而暂停然后 DelegateMehtod2 访问文件时,不会出现这种情况。这只发生在多个线程中,而不是在一个线程的多个委托中

如果它是多线程环境,那么您必须同步您的文件访问代码。

于 2012-07-09T14:58:39.337 回答
1

两件事情:

1)如果您在单个线程(很可能是主线程)上运行所有 NSURLConnections,那么只要您正在执行整个写入操作(即打开/创建),写入文件就不会有任何问题, write, close) 在 connectionDidFinishLoading 方法中。这是因为单个线程一次只能做一件事。

2) 在设计方面,您真的希望多个连接写入同一个文件吗?如果您正在创建大量 NSURLConnections,那么通常您希望能够记录它们,给它们唯一的文件名并分别处理它们。然后,这可以让您知道您当前有多少连接在飞行中,取消它们等等。

如果您只是在进行处理时将一些短期数据写入文件,那么可能对文件名使用唯一名称。基本上,我发现很难想出一个充分的理由让大量并发下载在完成时写入同一个文件 - 但也许你有一个!

于 2012-07-09T15:36:09.060 回答