gpt4 book ai didi

ios - 内在弱引用与非内在弱引用?

转载 作者:行者123 更新时间:2023-11-28 22:40:50 24 4
gpt4 key购买 nike

@interface ....
/* will be the next 'runningScene' in the next frame
nextScene is a weak reference. */
CCScene *nextScene_;
@end
@implementation .......
-(void) replaceScene: (CCScene*) scene
{
NSAssert( scene != nil, @"Argument must be non-nil");

NSUInteger index = [scenesStack_ count];

sendCleanupToScene_ = YES;
[scenesStack_ replaceObjectAtIndex:index-1 withObject:scene];
nextScene_ = scene; // nextScene_ is a weak ref
}

- (void) pushScene: (CCScene*) scene
{
NSAssert( scene != nil, @"Argument must be non-nil");

sendCleanupToScene_ = NO;

[scenesStack_ addObject: scene];
nextScene_ = scene; // nextScene_ is a weak ref
}
@end

那些日子我很喜欢在 ubuntu 上移植 cocos2d(名为 cocostep)。当我深入研究“CCdirector.m”的 cocos2d 源代码并观察“它是弱引用”评论的几点时,我发现了一些有趣的事情。就我对 objective-c、ios、osx 的了解。 ref 很弱,必须以 __weak 关键字开头,但我确实没有在整个项目中找到任何东西。所以我想这有点非内在的弱引用,只是 cocos2d 设计师的策略。根据我的假设。如果某个变量作为弱引用(非内在)被调用释放,并在其他地方释放它的内存,那么对该引用的后续调用将失败,甚至崩溃,因为引用的值不是 nil 而是对该内存的无效引用。为了正确使用这些策略,我必须手动将该变量重置为零。我的猜测对吗?

最佳答案

你的猜测是对的。

Cocos2d 不使用 ARC,所以当他们说 weak 时,它并不是正确的 ARC 意义上的weak

这些变量的正确术语应该是 unsafe_unretained,这意味着不会保留并且不会自动无效。

这些变量可能是悬挂指针,因此您最好注意这一点并尽快手动将其无效。

关于ios - 内在弱引用与非内在弱引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14566653/

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