Я использую NSMutableSet, который прекрасно работает, пока не появилась эта странная ошибка SIGABRT:
2011-07-05 17: 01: 00.249 Дама [1497: cd57] * Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [__NSCFSet removeObject:]: попытка удалить nil'
ОК, я не могу удалить nil, но вот мойcode:
id item = nil;
if ([theSet count] == 0) { // This equals 1 !!
item = [[[self getClass] alloc] init];
} else {
item = [[theSet anyObject] retain]; //this returns nil !!
[theSet removeObject:item]; // ERROR !!
}
Используя консоль gdb, я обнаружил, что theSet выглядит следующим образом:
(gdb) poSet
{(
(null)
)}
(gdb) print (int) [число наборов]
$ 1 = 1
Как это вообще возможно?
PS: я работаю в многопоточной среде .. Я не могу обещать, что к двум потокам не обращаются одновременно, но это не должно иметь место ..
РЕДАКТИРОВАТЬ
Пожалуйста, я действительно хочу знать, как NSSet может закончиться (ноль), мне все равно, как он туда попал .. Независимо от того, насколько грязномоя многопоточная программа, этоне должно случиться, я думаю.[И я дважды проверил, этот набор доступен только фоновому рабочему потоку].
РЕДАКТИРОВАТЬ
2011-07-05 17: 39: 55.884Приложение [1608: c59f] Установленное количество = 2 Содержит: {(
< Step: 0xc43f3e0>,
< Step: 0x62f1800> )}
2011-07-05 17: 39: 55.886 Приложение [1608: c59f] Установленное количество = 9 Содержит: {(
> < Step: 0x62eece0>,
> < Step: 0xc490660>,
> < Step: 0xcb597d0>,
> < Step: 0x65a4f60>,
> < Step: 0xc43f4b0>,
> < Step: 0xc43f3e0>,
> < Step: 0x65c8f60>,
> < Step: 0xc499230>,
> (null) )} //null appeared?!
СОВЕТ !!
Ознакомьтесь с методом Step
dealloc (xD):
-(void)dealloc{
if (![[PoolStep sharedPool] purgeFlag]) {
[[PoolStep sharedPool] doneWithItem:self]; //put it in the object pool for reuse..
} else {
NSLog(@"=== STEP ====> [ %d ]", --_counter);
[children release];
[super dealloc];
}
}
Другой СОВЕТ !!
PoolStepявляется одиночным блоком без блока @synchronize в методе sharedPool, поскольку к нему обращается только один поток (и требуется производительность)