加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 在Objective C中,如果我们将nil或null传递给@syn

发布时间:2020-12-16 10:03:56 所属栏目:百科 来源:网络整理
导读:通常我们会将一个对象传递给@synchronized()块以进行唯一引用.例如, +(id)sharedDBHandler{ @synchronized (self) { if (sDBHandler == nil) { sDBHandler = [self new]; } } return sDBHandler;} 如果我们将nil传递给它会发生什么? 解决方法 它根本不是@sy
通常我们会将一个对象传递给@synchronized()块以进行唯一引用.例如,

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

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

解决方法

它根本不是@synchronize().没有锁.无操作.未定义的行为.

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

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

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)
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读