Die*_*res 5 concurrency cocoa-touch objective-c nsmutablearray
我有一个类,它使用一个可变数组,在大量读取(新项到达)后修改一次.
问题在于,当数组变异时,读取会继续发生.
目前为了避免这个问题,每次它读取的内容都会在副本上执行此操作:
[[theArray copy] operation] //operation being indexOfObject:, objectAtIndex: objectsAtIndexes:, etc.
Run Code Online (Sandbox Code Playgroud)
副本变得非常昂贵,特别是在没有必要时(所有那些时候阵列没有被变异).
如何锁定数组以在发生变异时延迟对它的访问?
最简单的方法是使用@synchronized
,如下所示:
-(void) accessTheArray {
MyClass *obj;
@synchronized(theArray) {
obj = [theArray objectAtIndex:...];
}
[obj someMessage];
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果不使用ARC,您可能希望保留/自动释放该对象,否则可能会在someMessage
调用之前从阵列中删除(并释放)(感谢omz对此优秀评论).
归档时间: |
|
查看次数: |
937 次 |
最近记录: |