2010-06-14 4 views
0

Любая идея, почему этот код дает мне утечку памяти? Как вы можете видеть, у меня заканчиваются идеи относительно того, что я могу сделать, чтобы остановить ее.Утечка памяти iPhone app

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    NSArray *allSketches = [project.sketches allObjects]; 
    NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:allSketches]; 

    if(sketchesArray != nil) [sketchesArray release]; 

    [self setSketchesArray:temp]; 

    [allSketches release]; 
    allSketches = nil; 
    [temp release]; 
    temp = nil; 

} 

Я также выпускаю sketchesArray внутри видаDidDissapear. Я не использую viewDidLoad и dealloc для инициализации/выпуска этих объектов, так как я использую viewWillAppear и viewDidDissapear.

Благодаря

ответ

1

Fixed его с помощью вместо этого:

NSArray *allSketches = [project.sketches allObjects]; 
NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:allSketches]; 

[self setSketchesArray:temp]; 

[temp release]; 

Хотя я помню, что делал, и это не сработало раньше ... Странно ... Там по-видимому, до сих пор некоторые утечки памяти, поступающие от CoreGraphics хотя. Это нормально?

0

ли это быть выпущен где-то еще, когда вы сделали с ним?

[self setSketchesArray:temp]; 

В частности, вы освобождаетесь sketchesArray в этой функции, но вы делаете это в другом месте, когда вы сделали с точки зрения?

+0

да, он выпущен в dealloc. он работает сейчас, кстати. См. Выше :) –

0

Я не вижу утечки, но у вас есть пара вероятных перевыпусков.

Освобождение не nilsketchesArray должно осуществляться внутри setSketchesArray. И это не похоже, что у вас есть местная собственность allSketches либо ...

+0

Вы правы, спасибо. Я очень новичок в этом и до сих пор не привык к системе управления памятью. –

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