메모리 경고가 알림으로 전송되므로 기회가 발생하는 즉시 메모리 루프가 실행 루프에 대기합니다. 당신 같은 (고의적으로 파손) 루프를 작성한다면 : 때문에 어떤 기회 메모리 부족하지만에
while(1)
{
NSString *newString = [NSString string];
}
그리고 결국 앱이 살해 될 것이다 그것을 낮은 메모리 경고를받을 수있는 위치에있을 것입니다.
경고를받지 않고 메모리가 부족하여 사망 한 경우 어딘가에 메모리 병목 현상이 발생했을 가능성이 있습니다. 자동 풀링 풀에 많은 것을 남겨 둘 수있는 루프가 있습니다. , 당신이 루프를 통해 모든 방법을 얻을 경우 임시 개체 사라지고 따라서 장기 발자국을 가지고 있지만 그들은 루프에 남아있는 모든 시간을 축적하고있어.
그런 상황을 피하려면 루프의 내부 부분을 자신의 NSAutoreleasePool
에 중첩시켜야합니다. 예를 들어, 다음 루프는 다음과 같습니다.
while(1)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *newString = [NSString string];
[pool drain]; // stylistically preferred to release, but equivalent
// in reference counted environments
}
영원히 계속되지만 낮은 메모리 조건은 실행되지 않습니다. 또한, 애플의 엑스 코드 개발 환경은 메모리 누수 탐지를위한 도구를 제공 메모리 누수에 대한 시도 할 수 있습니다
엄청난 할당을 어딘가에 요청 하시겠습니까? –
나는 이것에 대해 생각했지만 정말로 그렇지는 않다. =/ – user1089658
다른 순서로 내 viewcontroller에 가면 다른 곳에서도 똑같은 일을 할 것이다. – user1089658