gpt4 book ai didi

objective-c - 在 Objective C 中,如果我们将 nil 或 null 传递给 @synchronized() block 会发生什么?

转载 作者:太空狗 更新时间:2023-10-30 03:49:54 27 4
gpt4 key购买 nike

通常我们会传递一个对象给@synchronized() block 作为唯一引用。例如,

+(id)sharedDBHandler
{
@synchronized (self) {
if (sDBHandler == nil) {
sDBHandler = [self new];
}
}
return sDBHandler;
}

如果我们将 nil 传递给它会发生什么?

最佳答案

它根本没有@synchronize()。没有锁。禁止操作。未定义的行为。

完全有效的问题,顺便说一句,不管代码是否过时并且不再是生成单例的正确方法。

来自 github 存储库。虽然没有记录在案的声明,但违反此政策会导致兼容性 hell 。

int objc_sync_enter(id obj)
{
int result = OBJC_SYNC_SUCCESS;

if (obj) {
SyncData* data = id2data(obj, ACQUIRE);
assert(data);
data->mutex.lock();
} else {
// @synchronized(nil) does nothing
if (DebugNilSync) {
_objc_inform("NIL SYNC DEBUG: @synchronized(nil); set a breakpoint on objc_sync_nil to debug");
}
objc_sync_nil();
}

return result;
}

地点:

BREAKPOINT_FUNCTION(
void objc_sync_nil(void)
);

关于objective-c - 在 Objective C 中,如果我们将 nil 或 null 传递给 @synchronized() block 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com