Итак, прежде всего @WTP абсолютно прав, и вы должны принять его ответ. +1 к нему.
Правильнее всего не касаться «предмета» после того, как вы его отпустили. И, конечно, не передавайте его другим ничего не подозревающим методам после того, как вы уже выпустили его.
Но, сказав, что, если вы хотите понять, почему порядок изменил то, пережили ли вы ошибку или нет, нужно помнить, что NSDictionary не сохраняет свои ключи, он копирует их .
Итак, последовательность сбоя была такой:
- Вы выделяете / инициализируете предмет - Сохраняете счет + 1
- Вы добавляете его в массив - Сохранить счет + 2
- Вы отпускаете его преждевременно - Сохраните счет + 1
- Вы используете его в качестве ключа в словаре - сохранить счет вашего объекта
+1 (словарь сделал копию объекта для собственного использования)
- Вы удаляете его из массива - Сохранить счет 0 - объект пропал
- Вы передаете висячий указатель на - [NSMutableDictionary
удалитьObjectForKey:] и вниз.
Счастливая последовательность, где ошибка не появилась:
- Вы выделяете / init -> + 1
- Вы добавляете его в массив -> + 2
- Вы отпускаете его -> + 1
- Вы используете его в качестве ключа -> + 1
- Вы передаете его, чтобы удалитьObjectForKey: -> Еще +1, и вы избежали
крушение
- Вы удаляете его из массива -> Число сохраняемых значений равно 0
Опять же, вы должны делать то, что советовал @WTP. Это просто справочная информация, если вам интересно. Надеюсь, это поможет.