【发布时间】:2018-10-23 08:05:54
【问题描述】:
由于writeData 调用是同步的,当我们从主队列以外的不同线程调用 writeData 时,最好的使用方法是什么?
例如,调用 Web 服务来获取一些数据,并将 completionHandler 分配给 Web 服务调用。现在这个完成处理程序将在不同的线程上执行(而不是在主队列上)。
我看到我的应用程序在 writeData 方法上卡住了 5 到 6 分钟。这是我现在唯一可以怀疑的事情。
我尝试用dispatch_async(mainQueue) 包裹我的writeData 呼叫,但没有成功。
- (void) writeToFile: (NSString *) targetString
{
//_loggingString holds the data, which keeps on accumulating as the user performs operations. At some point of time (callbacks from API's I call this method, to actually, write this string in the file and clear this string afterwards.)
NSString *oldString = [_loggingString copy];
_loggingString = [oldString stringByAppendingString:targetString];
if (![[NSFileManager defaultManager]fileExistsAtPath:@"somePath"])
{
[[NSFileManager defaultManager]createFileAtPath:@"somePath" contents:nil attributes:nil];
}
NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:@"somePath"];
[fileHandle seekToEndOfFile];
[fileHandle writeData:[_loggingString dataUsingEncoding:NSUTF8StringEncoding]];
_loggingString = @"";
}
【问题讨论】:
-
分享你如何处理 NSFileHandle 写操作的例子。
-
@AnkitThakur ,用代码编辑了我的问题。
标签: ios objective-c iphone grand-central-dispatch