ARC
을 사용하는 경우 @autoreleasepool{}
의 객체는 더 이상 사용하지 않을 때 해제해야합니다. 그러나목표 C - autoreleasepool 및 ARC 누출 메모리
코드
#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;
}
누출 메모리. 객체를 유출
악기 쇼에서 __NSArrayM 생성 - [있는 NSString componentsSeparatedByString :]
그래서, 질문은 왜 __NSArrayM 오브젝트는 작성 동일한 루프 반복에서 파괴되지 않습니다?
사람이 문제를
업데이트 해결을 도와 수 : 감사는 답을, 내가 잘못 용어 "메모리 누수"를 사용하고, 오해 방법 @autoreleasepool{}
작품 보인다. 이 문제를 해결하려면 for 루프 안에 @autoreleasepool{}
을 배치해야합니다.
이 코드는 많은 메모리를 할당하지만 유출되지 않습니다. – stosha
누수가 발생했다는 것을 알고 있다면 왜 그렇게 큰 루프를 반복하여 한 번의 반복 작업만으로 증명할 수 있습니까? :) –
사실이 질문에 대한 좋은 예라고 생각합니다. 나는 왜 그것이 많은 downvotes를 얻었는지 모르겠다. –