2011-05-10 4 views
1

NSMutableData를 만드는 동안 누수가 발생했습니다. 나는 NsMutableData를 생성하는 동안 누수가 발생했습니다.

webData2 = [[NSMutableData alloc]init]; 

그래서 나는 시험이이 ... connectionDidFinishLoading에 webData2을 해제 :

NSMutableData *test =[[NSMutableData alloc]init]; 
webData2 = test; 
[test release]; 

을 나는 지시에 누수가 : 이해가 안 NSMutableData *test =[[NSMutableData alloc]init];

을! 누구나 아이디어가 있으십니까?

감사합니다.

이 작동하지 않을

+0

+1 귀하의 질문에 대한 것이 아니라 귀하의 손잡이를 위해. 아 !! – makdad

답변

4

GT는 webData2에서 참조 test와 동일하고 방출한다.

  • [test release]; // object B is released, test and webData2 points to garbage
    1. webData2 = [[NSMutableData alloc]init]; // webData2 points to object A
    2. NSMutableData* test = [[NSMutableData alloc] init]; // test points to object B
    3. webData2 = test; // test and webData2 both points to A, nothing points to B
    4. 그래서 문제는 더 이상 라인 1.

      에 할당 B를 반대하는 명시 적 언급이없는 라인 3에있다

      를 출시해야합니다. 새로운 객체 포인터를 할당하기 전에 10.

      bbum이 가리키는 것처럼 누출은 항상 실제로 누출되는 곳이 아닌 객체가 할당 된 곳을 가리 킵니다.

      의심 스럽다면 정적 분석기를 사용하십시오 (실제로는 항상 정적 분석기를 수시로 실행하십시오). Xcode에서 빌드 메뉴 아래에 빌드 및 분석으로 표시됩니다. 많은 오류 중에서 대부분의 메모리 누수를 발견하고 여백에 파란색 화살표로 표시합니다. 화살표를 확장하면 할당에서 마지막 참조가 누락되는 누출에 대한 전체 프로그램 흐름이 표시됩니다.

    +2

    좋은 답변입니다. 누수가 누출 된 곳이 아닌 누설 된 곳이 어디에 있는지를 보여줍니다. 그것은 때때로 사람들을 혼란스럽게합니다. – bbum

    0

    당신이 할 수있는 것은 :

    NSMutableData *test =[[NSMutableData alloc]init]; 
    webData2 = [test copy]; 
    [test release]; 
    

    다음 webData2 테스트와 함께 발표되지 것입니다 ... 당신이 나중에 해제해야합니다.

    관련 문제