NSMutableArray Thread-Sicherheit

In meiner App greife ich von mehreren Threads auf ein veränderbares Array zu und ändere es. Am Anfang stürzte es ab, als ich versuchte, mit auf ein Objekt zuzugreifenobjectAtIndex, weil der Index außerhalb der Grenzen lag (das Objekt an diesem Index wurde bereits in einem anderen Thread aus dem Array entfernt). Ich habe im Internet nach Lösungen für dieses Problem gesucht und mich dazu entschlossen, dies zu versuchenLösung Ich habe eine Klasse mit gemachtNSMutableArray Eigenschaft finden Sie im folgenden Code:

@interface SynchronizedArray()
@property (retain, atomic) NSMutableArray *array;
@end

@implementation SynchronizedArray

- (id)init
{
    self = [super init];
    if (self)
    {
        _array = [[NSMutableArray alloc] init];
    }
    return self;
}

-(id)objectAtIndex:(NSUInteger)index
{
    @synchronized(_array)
    {
        return [_array objectAtIndex:index];
    }
}

-(void)removeObject:(id)object
{
    @synchronized(_array)
    {
        [_array removeObject:object];
    }
}

-(void)removeObjectAtIndex:(NSUInteger)index
{
    @synchronized(_array)
    {
        [_array removeObjectAtIndex:index];
    }
}

-(void)addObject:(id)object
{
    @synchronized(_array)
    {
        [_array addObject:object];
    }
}

- (NSUInteger)count
{
    @synchronized(_array)
    {
        return [_array count];
    }
}

-(void)removeAllObjects
{
    @synchronized(_array)
    {
        [_array removeAllObjects];
    }
}

-(id)copy
{
    @synchronized(_array)
    {
        return [_array copy];
    }
}

und ich benutze diese Klasse anstelle des alten veränderlichen Arrays, aber die App stürzt immer noch in dieser Zeile ab:return [_array objectAtIndex:index]; Ich habe auch diesen Ansatz mit probiertNSLock, aber ohne glück. Was mache ich falsch und wie behebe ich das?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage