gpt4 book ai didi

iphone - 如果一个方法在同一时间被调用两次,如何只执行一次?

转载 作者:太空狗 更新时间:2023-10-30 03:47:07 25 4
gpt4 key购买 nike

我们在 iPhone SDK 中有一个方法是委托(delegate)方法。问题是,操作系统同时两次调用此方法。这个方法做了一些繁重的工作,所以我不想两次执行逻辑。检测此问题并防止两者之一运行的好方法是什么?


忘记说了,它是从不同的线程调用的。

最佳答案

一种方法是一个 BOOL 成员,您在进入该方法时设置它并在离开它时清除它。如果变量是在输入时设置的,您就知道它已经在执行并且可以直接返回。

假设您被多个线程调用,您将希望锁定对检查/设置的这个关键区域的访问。 NSLock 对此很有帮助。

下面的代码有两个实现:使用 NSLock 的 myMethod1 和显示使用 @synchronize 的 myMethod2。

@interface MyClass : NSObject
{
NSLock* theLock;
BOOL isRunning;
}
@end

@implementation MyClass

-(id)init
{
self = [super init];
if(self != nil)
{
theLock = [[NSLock alloc] init];
isRunning = NO;
}
return self;
}

-(void)dealloc
{
[theLock release];
[super dealloc];
}

// Use NSLock to guard the critical areas
-(void)myMethod1
{
[theLock lock];

if(isRunning == YES)
{
[theLock unlock]; // Unlock before returning
return;
}

isRunning = YES;

// Do fun stuff here

isRunning = NO;

[theLock unlock];
}

// This method uses @synchronize
-(void)myMethod2
{
@synchronized(self)
{
if(isRunning == YES)
{
return;
}

isRunning = YES;

// Do stuff here.

isRunning = NO;
}
}
@end

关于iphone - 如果一个方法在同一时间被调用两次,如何只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1507638/

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