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) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |