0

これがばかげた質問である場合は申し訳ありませんが、私は iOS 開発に非常に慣れていません。だからここに質問があります:

に を追加するSecondViewFirstView、メモリが割り当てられますが、削除すると、割り当てられたメモリのすべてが解放されるわけではありません。

コードは次のとおりです。

ファーストビュー:

@interface FirstView : UIViewController
@property (nonatomic, retain) SecondView *secondView;
- (IBAction)loadSecondView;
@end

@implementation ViewController
@synthesize editView;
- (IBAction)loadSecondView{
    secondView = [[SecondView alloc]init];
    [self presentModalViewController:editView animated:YES];
}
- (void)viewWillAppear:(BOOL)animated{
    [secondView release]; secondView = nil; //this is called after SecondView is removed
}

セカンド ビュー:

@interface SecondView : UIViewController
@end

@implementation EditView
-(void)viewDidLoad{
    for (int intCounter = 0; intCounter < 10000; intCounter++){
        UIImageView *image = [[UIImageView alloc]init]; //create 10000 images just to fill up the memory
        [self.view addSubview:image];

        [image release]; image = nil;
    }
}
@end

以下は、Instruments (Live Bytes) から取得した数値です。

  1. FirstView の読み込み: 671 KB
  2. SecondView ロード: 3.28 MB
  3. 削除された SecondView: 809 KB

注: 機器は漏れを示していません

Liveバイトは初期値(671KB)にすべきではないでしょうか?809 KB の代わりに何が残っていますか?

4

1 に答える 1

1

これは漏れではありません。Apple は詳細の一部をキャッシュします。初めてviewcontrollerをロードすると、メモリ使用量が増加します。割り当てを解除すると、一部のものはキャッシュされたままになります。

そのため、最初の読み取りでは正確な画像が得られません。

同じ運動を2〜3回行います。したがって、3 回目の反復の開始時と 3 回目の反復の終了時に同じメモリ使用率を持つことができるはずです。

サイクルごとに増加する場合は、メモリ リークが発生している可能性があります。

于 2012-08-08T09:37:22.537 に答える