Вы правы, loadingStatus освобождается. Это потому, что значение автоматически высвобождается.
Если вы измените
loadingStatus = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"bad", nil] forKeys:[NSArray arrayWithObjects:@"amount", nil ] ];
до
loadingStatus = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"bad", nil] forKeys:[NSArray arrayWithObjects:@"amount", nil ] ];
[loadingStatus retain];
или
loadingStatus = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:@"bad", nil] forKeys:[NSArray arrayWithObjects:@"amount", nil ] ];
тогда ваш код будет работать.
Причина этого заключается в том, что объекту, возвращаемому из dictionaryWithObjects: forKeys, был вызван autorelease, поэтому, если вы хотите, чтобы он не был освобожден, вам нужно вызвать retain.
В качестве ссылки , если вы вызываете alloc / init, вы получите объект с счетом сохранения 1. Если вы используете метод, такой как dictionaryWithObjects: forKeys: вы получите объект с счетом хранения 0 . Чтобы решить эту проблему, просто добавьте удержание, и вам будет хорошо.
У Apple есть действительно хорошая документация по управлению памятью. Я рекомендую проверить это, когда у вас есть шанс
Руководство по управлению памятью
Правила управления памятью
Надеюсь, это поможет!
-Скотт