NsMutable массив сохранить счет - PullRequest
0 голосов
/ 23 августа 2010

я использовал инструменты, чтобы найти утечки в моем приложении для iphone, и обнаружил, что у меня есть утечка в этой строке в моем коде

tableViewController.dataSource = [[NSMutableArray alloc] initWithArray:]];

свойство dataSource определено как retain.это ошибка?!

Ответы [ 3 ]

4 голосов
/ 23 августа 2010

Разбейте:

NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
[tableViewController setDataSource:mutArray];
[mutArray release];

Это тот же шаблон, который вы используете для создания, нажатия и отпускания видов из контроллера навигации.

2 голосов
/ 23 августа 2010

Если вы укажете сохранение в объявлении своего свойства, то все, что вы назначите этому свойству, будет сохранено.

Итак, в вашем примере у вас есть два варианта:

  1. Вместо создания нового массива с подходом alloc / init, вы можете просто использовать [NSMutableArray arrayWithArray:[subjects_dic allKeys]];

  2. Отпустить свойство один раз после его установки.Этот вариант не является хорошей идеей, так как он может вызвать сбой, если в будущем управление памятью свойства будет изменено, а об этом выпуске забыто.

Я бы порекомендовал этот вариант1.

1 голос
/ 23 августа 2010

Другая альтернатива:

// mutableCopy implicitly retains the array returned by allKeys
NSMutableArray *mutArray = [[subjects_dic allKeys] mutableCopy];
[tableViewController setDataSource:mutArray]; // @property dataSource retains mutArray
[mutArray release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...