2010-07-18 2 views
0

Это то, на что указывает Инструмент.Почему мой NSMutableArray вызывает утечку?

students = [[NSMutableArray alloc] initWithArray:[course.students allObjects]]; 

Я выпускаю массив в dealloc. В остальной части моего кода я вызываю только массив, и я не собираю его снова. Я также попытался заполнить массив с помощью быстрого перечисления, и я получаю ту же проблему.

+0

Возможно, вы можете попробовать запустить Clang Static Analyzer (в недавнем Xcode: Build -> Build and Analyze). Имея только этот фрагмент кода, мы не можем точно сказать, что происходит. – Joost

+0

Я использовал сборку и анализ. Сначала я должен был прочитать об этом, потому что я никогда не слышал об этом. Я не получаю никаких сообщений от моих учеников = ... Есть ли окно, которое сообщает вам все ваши возможные проблемы после анализа? – tazboy

+0

Вот мой код, который касается «студентов»: 1.) self.students = [[[NSMutableArray alloc] initWithArray: [course.students allObjects]] autorelease]; 2.) rows = [students count] + 1; 3.) cell.textLabel.text = [[students objectAtIndex: (indexPath.row-1)] name]; 4.) Студент * student = [students objectAtIndex: row]; 5.) [students removeObject: student]; 6.) [выпуск студентов]; – tazboy

ответ

0

Просто, чтобы быть уверенным, добавьте autorelease к нему, как

students = [[[NSMutableArray alloc] initWithArray:[course.students allObjects]] autorelease]; 

Тогда посмотрим, что произойдет. (возможно, присвоить его self.students btw и сделать это сохраненным свойством, используя @property (nonatomic,retain))

+0

Использование autorelease фактически ухудшило его. Инструменты работают довольно медленно, после того как я доберусь до плохой части кода и с авторекламой он будет работать медленнее или даже заморозить инструменты. Мне пришлось перезагрузить компьютер. – tazboy

+0

Похоже, вы были правы, когда его выпустили. Где-то в моем кодексе я выпускал студента * студента, но я так и не выделил его. Видимо, это было бесполезно с моим ученическим массивом, хотя я никогда больше не использовал этого ученика. Я не понимал, что initWithArray возвратил массив alloc'ed и инициализированный, который положил значение count на 2. Слава Богу. Инструменты позволяют мне видеть счет сохранения, потому что он сделал это только один раз, насколько я помню. Еще раз спасибо. – tazboy

+0

Решена ли проблема? Остерегайтесь, хотя, глядя на такой счет; после 'alloc' и' initWithArray' счет сохранения должен быть только одним, который я думаю. Второй, может быть, вы держите объект - после того, как вы выполняете функцию, автообновление снимает ее. (Это всего лишь мой опыт, но я быстро научился * не * интерпретировать удержание счета, а скорее смотреть на код). – mvds

Смежные вопросы