Утечка находится в вашем цикле for, а также, возможно, в предыдущем.
Во-первых, эта строка:
[self setMyVector:[[NSMutableArray alloc] initWithCapacity:size]];
Если setMyVector сохраняет переданный массив (что, согласно соглашению, вероятно, должно), значит, вы утекли в массив. Сначала вы выделяете и инициализируете массив. У него остаточный счет +1. Затем вы устанавливаете его в переменную экземпляра myVector, что означает, что он имеет счетчик удержаний +2. Когда вы помещаете что-то еще в myVector или освобождаете переменную myVector в своем методе dealloc, вы собираетесь уменьшить счетчик сохранения, что означает, что он будет иметь счетчик сохранения +1. Другими словами, он не будет освобожден, и вы утекли в массив.
Другая определенная утечка находится внутри вашего цикла for (), где у вас есть:
[myVector addObject: [[NSMutableArray alloc] initWithCapacity:size]];
Опять же, вы создаете массив с сохраняемым счетчиком +1, затем добавляете его в массив myVector, который снова сохранит его (+2). Однако у вас больше нет указателя на массив, поэтому вы его утекли.
Обе эти утечки можно устранить, используя [NSMutableArray arrayWithCapacity:size] вместо подхода alloc / init. Это создаст автоматически выпущенный массив, который устранит вашу утечку памяти.
Если вы не знаете, что такое автосвобождение, вы можете рассмотреть возможность создания массива и сохранения его в локальной переменной, добавления его в myVector (или установки в myVector), а затем сразу же его освобождения.
person
Dave DeLong
schedule
06.09.2009
if (self != nil)можно заменить наif (self). - person Georg Schölly   schedule 07.09.2009