2012-03-03 4 views
0

Я создал (должен быть простой ...) модель MVC, но у меня все еще есть утечка памяти при нажатии кнопки возврата.iOS: утечка памяти в простой модели MVC

класс Модель: .h

@interface Nominal : NSObject { 

    int nominalID; 
    NSString *nominal; 
    NSString *nominalImg; 
    NSString *nominalName; 
} 
@property(nonatomic)int nominalID; 
@property(nonatomic,retain)NSString *nominal; 
@property(nonatomic,retain)NSString *nominalImg; 
@property(nonatomic,retain)NSString *nominalName; 
@end 

.m

@implementation Nominal 
@synthesize nominal,nominalID,nominalImg,nominalName; 
-(void)dealloc 
{ 
    [self.nominal release]; 
    [self.nominalImg release]; 
    [self.nominalName release]; 
} 
@end 

Я выпустите строки, а также.

На мой взгляд, класс я заполнить его так:

.h

@interface Nominals : UIViewController { 
    ... 
    NSMutableArray *nominalsArr; 
    ... 
} 
@property(retain,nonatomic)NSMutableArray *nominalsArr; 

.m

- (void)viewWillAppear:(BOOL)animated 
{ 
[[self navigationController]setToolbarHidden:YES animated:YES]; 
    DBAccess *dbAccsess=[[DBAccess alloc]init]; 
    self.nominalsArr=[dbAccsess returnNominals:subCountryID]; 
    [dbAccsess closeDataBase]; 
    [dbAccsess release]; 
    [super viewWillAppear:animated]; 
} 
- (void)dealloc 
{ 
    [nominalsArr release]; 
    [self.navigationController release]; 
    [super dealloc]; 
} 

Похоже, я выпустите весь пучок святынями, но когда я push pack от этого вида до предыдущего, появляется сообщение об утечке памяти:

enter image description here

Что я делаю неправильно?

Вы помогаете получить высокую оценку.

+0

Я не думаю, что это причина вашей проблемы, но обычно, если вы определили свойство как 'keep', чтобы позволить релизам быть выполненными для вас, то есть' self.property = nil; 'вместо отправки сообщение о выпуске. – paulbailey

+0

для NSStrings в классе модели? – NCFUSN

+1

Ну, обычно для _all_ (или нет, если вы предпочитаете освобождать/очищать iVar) сохраненные свойства. Установка их в null вызовет разблокировку автоматически. Просто обязательно используйте свойство (self.name) всюду, а не просто установите iVar (имя) в null или вы получите утечку. Переименование iVars в @synthesize - хорошая идея, чтобы держать их прямо. –

ответ

1

Вы забыли [super dealloc] в [Nominal -dealloc]. Кроме того, не вызывайте [self.navigationController release], поскольку это свойство уже обрабатывается суперклассом (UIViewController).

+0

Thx! Теперь я совсем не пропадаю! – NCFUSN

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