Я пишу программу Objective-C, которая использует сборщик мусора.
Я получаю EXC_BAD_ACCESS в некоторых ситуациях, классический пример того, как объект "слишком освобожден". Используя некоторые советы по отладке в этом техническом замечании , а именно MallocScribble и AUTO_LOG_COLLECTIONS , я могу видеть, что мой объект выводится из-под меня.
С учетом сказанного, вот мой код.
У меня есть NSMutableDictionary, который содержит ONLY ссылку на объект. В методе я тогда делаю:
NSObject *object = [dictionary objectForKey:key];
NSLog(@"Object is %@", object);
[dictionary removeObjectForKey:key];
Если я удаляю объект из словаря до оператора NSLog, если GC запускается в нужный момент, я получаю EXC_BAD_ACCESS . Удаление из словаря после никогда не завершается неудачей.
Почему это?