私の理解で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 ループ内に配置する必要がありました。