gpt4 book ai didi

iphone - 如何允许一个线程改变数组属性,而另一个线程迭代数组的副本

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:23 24 4
gpt4 key购买 nike

我想在 Objective-C 中实现一个观察者模式,观察者实现一个类似于 SKPaymentTransactionObserver 的接口(interface)。可观察类只是扩展了我的基本可观察类。我的可观察类看起来类似于下面的内容。请注意,我在枚举之前复制观察者以避免抛出 exception。 .

我尝试在添加观察者和通知观察者周围添加一个 NSLock,但我遇到了死锁。

在发送通知时添加观察者时,处理并发的正确方法是什么?

@implementation Observable

-(void)notifyObservers:(SEL)selector {
@synchronized(self) {
NSSet* observer_copy = [observers copy];
for (id observer in observer_copy) {
if([observer respondsToSelector: selector]) {
[observer performSelector: selector];
}
}
[observer_copy release];
}
}

-(void)notifyObservers:(SEL)selector withObject:(id)arg1 withObject:(id)arg2 {
@synchronized(self) {
NSSet* observer_copy = [observers copy];
for (id observer in observer_copy) {
if([observer respondsToSelector: selector]) {
[observer performSelector: selector withObject: arg1 withObject: arg2];
}
}
[observer_copy release];
}
}

-(void)addObserver:(id)observer {
@synchronized(self) {
[observers addObject: observer];
}
}

-(void)removeObserver:(id)observer {
@synchronized(self) {
[observers removeObject: observer];
}
}

最佳答案

您不能选择更简单的方式 notifications

关于iphone - 如何允许一个线程改变数组属性,而另一个线程迭代数组的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2484203/

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