gpt4 book ai didi

ios - 有什么好的方法可以防止 Objective-C 中特定代码段的递归?

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

这是我目前正在为循环 ScrollView 做的事情:

// Call the on-scroll block
static BOOL inOnScrollBlock = NO;
if((_onScrollBlock != nil) && !inOnScrollBlock)
{
inOnScrollBlock = YES;
_onScrollBlock(self, self.loopOffset);
inOnScrollBlock = NO;
}

这是在循环 ScrollView 的 setContentOffset 中。因此,用户可以在滚动时运行代码。如果您设置其中两个并希望它们相互跟踪,那么您为两者都提供一个设置另一个的 block ,那么您可以得到一个递归情况,它们不断相互调用。

实际上在这种情况下它并不太糟糕,因为在执行所有更高级的操作之前有一个单独的检查来查看正在设置的值是否已经设置,但是因为它是一个循环 View ,所以有多个等效值所以它可能会发生几次。

无论如何,问题是关于在这种情况下防止递归。鉴于这是一个 UI 方法,因此只在主线程上调用,当你从 block 中调用时,我使用简单标志捕获的方法是否合理?

是否有任何语言功能或框架模式(在 iOS 中可用)来执行此操作 - 类似于 @synchronizeddispatch_once 但要防止特定代码部分的递归?

最佳答案

我不会使用静态 BOOL,因为静态是在类级别实现的。如果你有这个类的两个实例怎么办?他们会搬起石头砸自己的脚!至少,使用实例变量(即属性,并且不要将其声明为 nonatomic,以防万一)。

关于ios - 有什么好的方法可以防止 Objective-C 中特定代码段的递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328096/

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