当发生错误时,[NSData writeToFile:atomically]会抛出异常吗?

时间:2015-09-02 14:31:28

标签: objective-c multithreading

我试图在多线程中调用[NSData writeToFile:atomically]。

[myLock lock];
[myData writeToFile:aPath atomically:YES];
[myLock unlock];

但是如果writeToFile抛出异常,则不会调用[myLock unlock]。那么,我应该像这样使用try-cache吗?

@try
{
    [myLock lock];
    [myData writeToFile:aPath atomically:YES];
}
@catch (NSException *exception) {
    // deal with the exception
}
@finally {
    [myLock unlock];
}

更新 将'自动'更改为'原子'

3 个答案:

答案 0 :(得分:1)

它不会抛出任何异常(也没有文档中的说明也是如此)。如果您担心处理错误,请使用其他API:

- writeToFile:options:error:

答案 1 :(得分:1)

首先,方法是

- (BOOL)writeToFile:(NSString * nonnull)path
     atomically:(BOOL)atomically

不是自动,可能只是一个错字。

其次,writeToFile不会引发异常,它只会返回一个BOOL,指示写入是否失败或成功。

[myLock unlock];

无论如何都会被召唤,你不需要捕捉任何异常。

这里是documentation

答案 2 :(得分:0)

无论是否捕获到异常,都会调用

@finally,因此您不必担心它未被解锁。