1

私の理解でARCは、有効になっている場合、内部のオブジェクトは@autoreleasepool{}使用されなくなったときに解放する必要があります。

ただし、コード

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        for (int i = 0; i < 1000000000; i++) {
            NSString *string = @"ab c";
            NSArray *array = [string componentsSeparatedByString:string];
        }
    }
    return 0;
}

メモリリークします。

楽器は、リークされたオブジェクトが -[NSString componentsSeparatedByString:] によって作成された __NSArrayM であることを示しています

問題は、__NSArrayM オブジェクトが作成されたのと同じループ反復で破棄されないのはなぜですか?

誰でもこの問題を解決するのを手伝ってくれますか

更新:回答ありがとうございます。「メモリリーク」という用語を間違って使用したようで、仕組みを誤解しているよう@autoreleasepool{}です。この問題を解決するには@autoreleasepool{}、for ループ内に配置する必要がありました。

4

3 に答える 3