2011-07-15 6 views
0

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

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

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

...m file: 

NSMutableArray* foo; 

@implementation .... 

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

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

    [foo release]; 
} 

...

+0

вам действительно нужно, чтобы запустить цикл, чтобы освободить каждого объекта? Я считаю, что сообщение 'release' отправляется каждому элементу массива, когда сам массив выпущен. –

+0

Пожалуйста, добавьте реальный код. Таким образом, вам не нужно выделять объекты, которые вы добавили в массив. Массив сохраняет их и освобождает их при освобождении. –

+0

@ Deepak y u u downvote me –

ответ

1

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

1

При выпуске 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

Как-то я думаю, что он делает почти то же самое, что и причина, по которой он должен получить утечку. 'self.foo = [[NSMutableArray alloc] init];' имеет 2 сохраненных и вы отпускаете только один раз в конце. –

+1

Хорошая точка. Мог бы попробовать обернуть авторекламу вокруг него ... – coryjacobsen

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