NSMutableArray Objective C является потокобезопасным?
Я пытался исправить эту ошибку почти неделю. Приложение вылетает без каких-либо исключений или трассировки стека. Приложение не вылетает при работе с инструментами в режиме зомби.
У меня есть метод, который вызывается в другом потоке. Решение, которое исправило сбой, заменяло
[self.mutableArray removeAllObjects];
с
dispatch_async(dispatch_get_main_queue(), ^{
[self.searchResult removeAllObjects];
});
Я подумал, что это может быть проблема с синхронизацией, поэтому я попытался синхронизировать ее, но она все еще не работала:
@synchronized(self)
{
[self.searchResult removeAllObjects];
}
Вот код
- (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
}
}
}
Эта проблема с NSMutableArray не является потокобезопасным?