Утечка памяти с NSUserDefaults и NSMutableArray - PullRequest
0 голосов
/ 20 декабря 2010

Я определяю несколько NSMutableArrays из данных, хранящихся в NSUserDefaults, как это:

    nameArray = [[[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"names"]]mutableCopy];

и я выпускаю в dealloc.

nameArray определено в заголовочном файле моего контроллера представления внутри @interface, потому что его областью действия должен быть весь класс.

Кажется, с этим связана утечка памяти (утилита утечки инструментов говорит мне об этом).

Кто-нибудь видит что-то не так с тем, что я делаю, что может привести к утечке?

1 Ответ

3 голосов
/ 20 декабря 2010

Избавьтесь от вызова mutableCopy, он вам не нужен, поскольку вы уже alloc/init -ing NSMutableArray:

nameArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"names"]];

mutableCopy является виновником здесь, потому что он увеличивает счетчик сохранений получателя (который уже равен 1), поэтому, когда вы вызываете release в вашем методе -dealloc, счетчик сохранений уменьшается до 1, а не 0.

Вам не нужно вызывать mutableCopy, потому что вы передаете массив в инициализатор NSMutableArray, который по сути сделает ваш новый массив изменчивым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...