gpt4 book ai didi

objective-c - 单例 : why this code is valid? 中的 NSAssert

转载 作者:行者123 更新时间:2023-12-04 05:49:34 24 4
gpt4 key购买 nike

我不明白 +alloc 中 NSAssert 的使用,当 +alloc来自 +sharedGameManager ,静_sharedGameManager变量是 nil (所以 NSAssert 应该在第一次调用 [self alloc] init] 时停止执行...)

+(GameManager*)sharedGameManager {
@synchronized([GameManager class])
{
if(!_sharedGameManager)
[[self alloc] init];
return _sharedGameManager;
}
return nil;
}

+(id)alloc
{
@synchronized ([GameManager class])
{
NSAssert(_sharedGameManager == nil,
@"Attempted to allocated a second instance of the Game Manager singleton");
_sharedGameManager = [super alloc];
return _sharedGameManager;
}
return nil;
}

感谢您的回答

最佳答案

你认为 NSAssert 是错误的吗?

NSAssert( _sharedGameManager==nil, @"Attempted to …");

如果 _sharedGameManager 将抛出异常不是 零。它断言表​​达式为真,它说“我断言这一定是这种情况”,因此 _sharedGameManager必须为零,否则会引发异常。只有当您尝试创建此类的 2 个实例时才会发生这种情况。

关于objective-c - 单例 : why this code is valid? 中的 NSAssert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237111/

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