在 C++ 下,我有一个Mutex
类,我使用这个 RAII 风格的类来确保互斥锁被解锁,不管方法返回的原因是什么:
class MutexLock {
protected:
Mutex &m_mutex;
public:
MutexLock(Mutex &mutex) :
m_mutex(mutex) {
m_mutex.lock();
}
~MutexLock() {
m_mutex.unlock();
}
};
是否有任何理由,并且在使用 ARC 时,等效的 Objective-C 类不能正常工作:
@interface Locker : NSObject {
NSLock *_lock;
}
- (void)setLock:(NSLock *)lock;
@end
@implementation Locker
- (void)setLock:(NSLock *)lock {
[_lock unlock];
_lock = lock;
[_lock lock];
}
- (void)dealloc {
self.lock = nil;
}
@end
可以通过以下方式使用:
NSLock *_lock; // instance variable
- (void)myFunc {
Locker *locker = [[Locker alloc] init];
locker.lock = _lock;
return; // Whenever I like
}
我知道它在 Objective-C 异常的情况下不起作用,与 C++ 版本不同,但假设所有 Objective-C 异常都是致命的,我并不担心。
更新刚刚进行了快速测试,它似乎工作正常。请参阅此要点。