我想知道如果以下是最好的方法来读取并复制一个可能被另一个锁定的对象线?对另一个可能被另一个线程锁定的对象进行“脏读”的最佳方法-c
-(NSObject*) getCopyOfActiveObjectsOfType:(Class) objectClass
{
NSMutableArray* copy = [NSMutableArray arrayWithArray:[self.activeObjects objectForKey:objectClass]];
return copy;
}
我有几个类似于下面的方法,锁定有问题的对象,以添加或删除对象到数组。
-(void) addObject:(NSObject *)object toPoolOfObjects:(NSMutableDictionary*) objects
{
Class objectClass = [object class];
@synchronized (objects)
{
NSMutableArray* objectArray = [objects objectForKey:objectClass];
if(objectArray == nil)
{
objectArray = [[[NSMutableArray alloc] init] autorelease];
[objects setObject:objectArray forKey:objectClass];
}
[objectArray addObject:object];
}
}
是不是锁定点*不*要做到这一点? – omz
顺便说一句,当你在任何地方使用它时,@synchronized指令只有一个效果。它不会阻止你访问@synchronized块之外的对象,所以你可以*访问'无论你喜欢的对象',但你真的不应该这样做。 – omz
嗯,我正在尝试做类似于脏读和类似于数据库的非重复读取:http://en.wikipedia.org/wiki/Isolation_(database_systems)#Dirty_readsI需要同步某些代码块,这些代码块需要保持一致,但在第一种方法中,因为我只需要读取数据,并且不介意它是否不一致,所以我需要一种方法来实现这一点。第一种方法不应该被锁定对象的其他方法的锁定操作阻止,因为我需要第一种方法是快速的。如果其他方法由于锁定而变慢,那没问题。 – xcoder