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

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

概述通常我们会将一个对象传递给@synchronized()块以进行唯一引用.例如, +(id)sharedDBHandler{ @synchronized (self) { if (sDBHandler == nil) { sDBHandler = [self new]; } } return sDBHandler; 通常我们会将一个对象传递给@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));
总结

以上是内存溢出为你收集整理的objective-c – 在Objective C中,如果我们将nil或null传递给@synchronized()块会发生什么?全部内容,希望文章能够帮你解决objective-c – 在Objective C中,如果我们将nil或null传递给@synchronized()块会发生什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1217396.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存