получить утечку, пытаясь освободить NSMutableArray - PullRequest
0 голосов
/ 15 июля 2011

Я получаю утечку памяти, выпуская NSMutableArray в UIViewController, который раскручивается, затем в ViewDidLoad он выделяет и вставляет массив, добавляет к нему объекты; и затем, когда представление закрывается: его dealloc () освобождает каждый объект массива, затем освобождает массив.

И обычно возникает утечка.

Моя основная структура: ...

...m  file:

NSMutableArray* foo;

@implementation ....

viewDidLoad
{
[[foo  alloc]  init];
...
}

dealloc
{
  for i = each foo object:
    [foo  objectAtIndex: i]  release];

    [foo  release];
}

...

Ответы [ 2 ]

1 голос
/ 15 июля 2011

При выпуске NSMutableArray он обрабатывает все его дочерние элементы.То же самое касается NSArray, NSMutableDictionary, NSDictionary и т. Д. И т. Д.

Попробуйте настроить foo в качестве переменной экземпляра в заголовке, а затем синтезировать ее:

...h file
@interface MyObject : NSObject {
    NSMutableArray* foo;
}

@property (nonatomic, retain) NSMutableArray *foo;

...m file
@implementation ....
@synthesize foo;

viewDidLoad
{
    self.foo = [[NSMutableArray  alloc]  init];
    ...
}

dealloc
{
    [foo  release];
}
1 голос
/ 15 июля 2011

Утечка в этом случае может произойти, когда элементы в вашем массиве retain редактируются в другом месте.Отправка сообщения release этому элементу только уменьшит его количество и фактически не освободит его.

...