0

何らかの理由で、2 つNSImageViewの を割り当てると、大量のメモリ リークが発生します。メソッドは両方で呼び出されます
が。deallocNSImageView

を使用してARCいます。


NSImageView_

次の getter メソッドが呼び出されるとすぐに、大量のメモリが使用されます。
これは問題ありませんが、ウィンドウが閉じられているときに割り当てが解除されません...

- (NSView *)animationView {
    if (!_animationView) {
        _animationView = [[NSView alloc] initWithFrame:self.bounds];

        self.oldCachedImageView = [[NSImageView alloc] initWithFrame:self.bounds];
        [_animationView addSubview:self.oldCachedImageView];
        self.oldCachedImageView.wantsLayer = YES;

        self.cachedImageView = [[NSImageView alloc] initWithFrame:self.bounds];
        [_animationView addSubview:self.cachedImageView];
        self.cachedImageView.wantsLayer = YES;

        self.animationView.wantsLayer = YES;
    }

    return _animationView;
}

ここに画像の説明を入力

最初の円は、上記の getter メソッドが呼び出されたときです。
2 つ目は、ウィンドウの割り当てが解除されたときです。


なしNSImageView_

NSImageViewコメントアウトされた2つのsではありません。

- (NSView *)animationView {
    if (!_animationView) {
        _animationView = [[NSView alloc] initWithFrame:self.bounds];
        /*
        self.oldCachedImageView = [[NSImageView alloc] initWithFrame:self.bounds];
        [_animationView addSubview:self.oldCachedImageView];
        self.oldCachedImageView.wantsLayer = YES;

        self.cachedImageView = [[NSImageView alloc] initWithFrame:self.bounds];
        [_animationView addSubview:self.cachedImageView];
        self.cachedImageView.wantsLayer = YES;

        self.animationView.wantsLayer = YES;
         */
    }

    return _animationView;
}

ここに画像の説明を入力

ここにメモリリークはありません...


なぜこれが起こるのか誰にも分かりますか?

4

1 に答える 1