2012-03-03 14 views
0

MVCモデルをビルドしましたが(シンプルでなければなりませんが)、バックボタンを押すとまだメモリリークがあります。iOS:単純なMVCモデルのメモリリーク

Modelクラス:

@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。私は移入私の見解クラスで

それはそう:

の.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]; 
} 

が、私は神聖な物事の全体の束を解放行うように見えますが、私このビューから前のパックボタンを押すと、メモリリークがポップアップします。

enter image description here

私は間違っていますか?

あなたのお手伝いをしていただきありがとうございます。

+0

私はそれがあなたの問題の原因だとは思っていませんが、releaseをあなたのために行うために 'retain'とプロパティを定義した場合、つまり送信するのではなく' self.property = nil;リリースメッセージモデルクラスのNSStringsの – paulbailey

+0

? – NCFUSN

+1

通常、_all_(またはiVarを解放/消去したい場合は保持されません)のプロパティは保持されます。 nullに設定すると、自動的にリリースが呼び出されます。どこでもプロパティ(self.name)を使用して、iVar(name)をnullに設定するだけでなく、漏れを取得するようにしてください。 @synthesizeでiVarsの名前を変更することは、それらをまっすぐに保つことをお勧めします。 –

答えて

1

[super dealloc]を忘れました。[Nominal -dealloc]です。また、スーパークラス(UIViewController)によってプロパティがすでに処理されているため、[self.navigationController release]を呼び出さないでください。

+0

Thx!今私は全く漏れません! – NCFUSN

関連する問題