次の方法が、別のスレッドによってロックされている可能性のあるオブジェクトを読み取ってコピーするための最良の方法であるかどうか疑問に思っていましたか?
-(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];
}
}