假设这些是实例方法并且调用了-run
。
在 -run
返回时是否释放了对 self
的锁定?
...
- (void)dangerous {
@synchronized (self) {
[NSException raise:@"foo" format:@"bar"];
}
}
- (void)run {
@try { [self dangerous]; }
@catch (NSException *ignored) {}
}
...
最佳答案
@synchronized(obj) { code }
block 实际上等同于
NSRecursiveLock *lock = objc_fetchLockForObject(obj);
[lock lock];
@try {
code
}
@finally {
[lock unlock];
}
尽管这方面的任何特定方面实际上都只是实现细节。但是,是的,无论控制如何退出 block ,@synchronized
block 都保证释放锁。
关于objective-c - @synchronized block 是否保证释放它们的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735799/