0

viewcontroller1、viewcontroller2という名前の2つのビューがあります。すべてのviewcontrollerには約3枚の画像が読み込まれます(XIBに読み込む)。[self.navigationcontrollerpushviewcontroller]を使用してview1をview2にプッシュしようとすると、メモリが解放されません(viewcontrller1を解放できないかuiimageviewを解放できないことを確認したい)私のコードのエラー??

次のようなviewcontroller1コード:

viewcontroller1.h

@interface ViewController : UIViewController
@property(strong,nonatomic)IBOutlet UIImageView *mainImageView;
@property(strong,nonatomic)IBOutlet UIImageView *topwallImageView;
@property(strong,nonatomic)IBOutlet UIImageView *buttonImageView;

viewcontroller1.m

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
self.mainImageView = nil;
self.topwallImageView = nil;
self.buttonImageView = nil;
[super viewDidUnload];
// Release any retained subviews of the main view.
}

-(void)dealloc
{
[mainImageView release];
[topwallImageView   release];
[buttonImageView release];
[super dealloc];
}

-(IBAction)main2ViewController:(id)sender
{
Main2ViewController *main2ViewController =[[Main2ViewController alloc]initWithNibName:@"Main2ViewController" bundle:nil];
[self.navigationController pushViewController:main2ViewController animated:NO];
[main2ViewController release];
}
4

1 に答える 1

0

iOS でのオブジェクト通信とメモリ管理についてもっと詳しく勉強する必要があります。

ARCも是非使ってみてください。自動参照カウント(ARC) は iOS 5 SDK で導入され、メモリ管理をコンパイラの仕事にすることで、Objective-C プログラマがメモリ管理を処理する必要がなくなりました。

このリンクを使用して、プロジェクトを ARC 対応に変換できます

viewcontroller2 が表示されている間、またはviewcontroller2をプッシュした後に、 viewcontroller1とその IBOutlet プロパティを解放することはできません。viewcontroller1から viewcontroller2をプッシュしたためです。viewcontroller1は、viewcontroller2 のコンテナー/親です。viewcontroller2 は、viewcontroller1 がなければ存在しません

IBOutlet の imageview 画像については、nil に設定できます。例: yourImageview.image = nil; ただし、IBOoutlet の Imageview メモリは解放されません。

viewcontroller1のdeallocメソッドで適切に解放したため、解放メソッドがviewcontroller1に呼び出されたときにIBOutletのimageviewが解放されます:)

Main2ViewControllerメソッドについて:コードでメモリを適切に処理しました

pushViewController を呼び出すと、デフォルトでプッシュされるコントローラーが保持されます。あなたは所有者ではないことに注意してください。コントローラーが飛び出すと自動的に解放されます。ただし、割り当てられた Main2ViewController を解放する必要があります。だからあなたのコードは大丈夫です:)

于 2012-09-21T08:13:10.630 に答える