0

こんにちは、アプリケーションで非常にとらえどころのないメモリ リークを突き止めようとしています。

原因を特定するために、リークしているコードを削除し、テスト目的でアプリ デリゲートに移動して、できるだけ多くの要因を排除しようとしました。

次のコードは、オプションを指定して起動を終了したことから呼び出されます。

- (void)loadDataAsTest {


        NSLog(@"%s ", __PRETTY_FUNCTION__);

        _library = [[ALAssetsLibrary alloc] init];

        [_library enumerateGroupsWithTypes:ALAssetsGroupPhotoStream usingBlock:^(ALAssetsGroup *alAssetsGroup, BOOL *stop) {

            @autoreleasepool {

                if (alAssetsGroup) {

                    [alAssetsGroup enumerateAssetsUsingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *st) {
                        @autoreleasepool {

                            if (alAsset) {

                                NSLog(@"index = %u", index);
                                UIImage *image = [UIImage imageWithCGImage:[alAsset thumbnail]];

                            }
                            else {


                            }
                        }
                    }];
                }
            }

        }                     failureBlock:^(NSError *error) {

        }];

}

私のアプリケーションでは、このコードは、フォト ストリーム内の 1000 枚以上の写真を列挙する約 2000 枚の CGImage をリークします。作成された 2000 個の UIImage はすべて問題なくリリースされています。

テスト目的で新しい空のプロジェクトを作成し、アプリのデリゲートに同じコードを入れて、まったく同じ方法で呼び出すと、リークしません。すべての CGimage が解放され、すべての UIImage がそれぞれ約 2000 インスタンスずつ解放されます。

どちらのプロジェクトも ARC を使用しています。

まったく同じ方法で呼び出された同じコードが、2 つのプロジェクト間で異なる動作をするのはなぜですか?

4

0 に答える 0