Ist NSMutableArray von Objective-C threadsicher?
Ich habe fast eine Woche lang versucht, diesen Absturz zu beheben. Die Anwendung stürzt ohne Ausnahme oder Stack-Trace ab. Die Anwendung stürzt in keiner Weise ab, wenn sie im Zombie-Modus durch Instrumente läuft.
Ich habe eine Methode, die in einem anderen Thread aufgerufen wird. Die Lösung, die den Absturz behebt, wurde ersetzt
[self.mutableArray removeAllObjects];
mit
dispatch_async(dispatch_get_main_queue(), ^{
[self.searchResult removeAllObjects];
});
Ich dachte, es könnte ein Timing-Problem sein, also habe ich versucht, es zu synchronisieren, aber es stürzte immer noch ab:
@synchronized(self)
{
[self.searchResult removeAllObjects];
}
Hier ist der Code
- (void)populateItems
{
// Cancel if already exists
[self.searchThread cancel];
self.searchThread = [[NSThread alloc] initWithTarget:self
selector:@selector(populateItemsinBackground)
object:nil];
[self.searchThread start];
}
- (void)populateItemsinBackground
{
@autoreleasepool
{
if ([[NSThread currentThread] isCancelled])
[NSThread exit];
[self.mutableArray removeAllObjects];
// Populate data here into mutable array
for (loop here)
{
if ([[NSThread currentThread] isCancelled])
[NSThread exit];
// Add items to mutableArray
}
}
}
Ist dieses Problem mit NSMutableArray nicht threadsicher?