我试图在多线程中调用NSData writeToFile:原子化。
[myLock lock];
[myData writeToFile:aPath atomically:YES];
[myLock unlock];但是,如果writeToFile抛出异常,则不会调用myLock解锁。所以,我应该像这样使用尝试缓存吗?
@try
{
[myLock lock];
[myData writeToFile:aPath atomically:YES];
}
@catch (NSException *exception) {
// deal with the exception
}
@finally {
[myLock unlock];
}更新:将“自动”更改为“原子化”
发布于 2015-09-02 14:36:10
它不会抛出任何异常(也不会在文档中这样说)。如果您关心的是处理错误,请使用其他API:
- writeToFile:options:error:发布于 2015-09-02 15:19:11
首先,方法是
- (BOOL)writeToFile:(NSString * nonnull)path
atomically:(BOOL)atomically不是automatically,,可能只是一个错误。
其次,writeToFile不会引发异常,它只会返回一个BOOL,指示写入是失败还是成功。
[myLock unlock];无论如何都会被调用,您不需要捕获任何异常。
这是文档
发布于 2015-09-02 14:38:17
不管异常是否被捕获,都会调用@finally,因此您不需要担心它没有被解锁。
https://stackoverflow.com/questions/32355989
复制相似问题