2011-12-09 4 views
6

지금 당장 문제가 발생하며 누구든지 도움을받을 수 있는지 알고 싶습니다. 메인 탐색 컨트롤러와 많은 UIImage를 사용하여 IOS 앱 (iPad)을 개발 중입니다. 잠시 동안 응용 프로그램을 사용하면 응용 프로그램이 특정 메모리가 아닌 메모리 부족으로 종료되지만 iPad 로그를 확인하여 메모리 부족 경고가 표시되지 않는 경우가 있습니다 (때로는 때로는 그렇지 않은 경우도 있음) . 메시지가 수신 되더라도 "낮은 메모리 경고가 수신되었습니다."이지만 "레벨 1"또는 "레벨 2"을 절대받지 못합니다.메모리 부족으로 IOS 앱이 죽었으나 메모리 경고가 수신되지 않았습니다.

xCode의 누설 도구를 사용하여 누출을 찾을 수 없었습니다.

아무도 도와 줄 수 있습니까?

+0

엄청난 할당을 어딘가에 요청 하시겠습니까? –

+0

나는 이것에 대해 생각했지만 정말로 그렇지는 않다. =/ – user1089658

+0

다른 순서로 내 viewcontroller에 가면 다른 곳에서도 똑같은 일을 할 것이다. – user1089658

답변

9

메모리 경고가 알림으로 전송되므로 기회가 발생하는 즉시 메모리 루프가 실행 루프에 대기합니다. 당신 같은 (고의적으로 파손) 루프를 작성한다면 : 때문에 어떤 기회 메모리 부족하지만에

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 
} 

영원히 계속되지만 낮은 메모리 조건은 실행되지 않습니다. 또한, 애플의 엑스 코드 개발 환경은 메모리 누수 탐지를위한 도구를 제공 메모리 누수에 대한 시도 할 수 있습니다

+0

메모리가 부족한 루프를 식별하는 방법에 대한 제안 사항이 있으십니까? ... 나는이 문제 (mem 알림 없음 - 간단히 충돌)가있는 큰 응용 프로그램에서 작업하고 있으며 많은 메모리를 사용하는 장소가 많이 있습니다. 애플이 자신의 이미지/CG/CALayer 렌더링을 Allocations에서 숨기고, 애플 리케이션에 많은 루프가 많아지기 때문에 어떤 것이 있는지 쉽게 알 수 없습니다. NSAutoReleasePools를 앱에 넣는 것보다 자동/사전 대응 적으로 제안 범위를 좁히는 데 어떤 제안이 있습니까? – Adam

5

는, 그것을 실행하는 가장 쉬운 방법은 직선

엑스 코드 : 1. 제품 -> 2.Start와 성능 도구 (프로파일 러) -> 3. 악기에서 누출을 선택하십시오.

메모리 누수를 감지하는 데 매우 효과적이며 쉽게 알아낼 수 있습니다.

관련 문제