0

: 그것은 내가 오순절기구를 감지 것을, 버려진 메모리로 솔기포기 메모리

ABNewPersonViewController *c = [[ABNewPersonViewController alloc] init]; 
    [c setNewPersonViewDelegate:self]; 
    [c setDisplayedPerson:newPerson]; 
    CFRelease(newPerson); 


    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:c]; 
    [self presentModalViewController:nc animated:YES]; 

일부. 실마리가 있습니까?

답변

0

릴리스 c. NC에서 유지되었습니다

+0

하지만 ARC를 사용하므로 C = nil을 사용합니까? –

0

CFRelease를 제거하고 UINavigationController를 ivar로 만듭니다. 이것이 ARC가 특정 클래스가 할당 해제 될 때까지 내비게이션 컨트롤러를 메모리에 유지하는 방법입니다.

ABNewPersonViewController *personViewController = [[ABNewPersonViewController alloc] init]; 
[personViewController setNewPersonViewDelegate:self]; 
[personViewController setDisplayedPerson:newPerson]; 

//this line is not required 
//CFRelease(newPerson); 

//UINavigationController *personNavigationController; define nc as ivar in the .h file. 
personNavigationController = [[UINavigationController alloc] initWithRootViewController:personViewController]; 
[self presentModalViewController:personNavigationController animated:YES]; 

그리고 Apple의 일부 명명 규칙을 따르고 싶다면 코드를 잘 읽을 수 있어야합니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다.하지만 더 악화되고 버려진 메모리는 더욱 빠르게 성장합니다. 내가 올바르게 이해하면 모든 C 기능이 ARC로 출시되지 않습니다. newPerson을 출시해야할까요? –

+0

오케이. "newPerson"은 객관적인 C 클래스 객체였습니다. 그래서 ARC가 당신을 위해 그것을 공개 할 것이기 때문에 공개하지 않도록 요청했습니다. 그리고 대개는 새로운 변수 앞에 변수를 두어서는 안됩니다. 정적 분석기를 혼란스럽게합니다 (new, init, alloc은 객체의 소유권에 대해 컴파일러에게 알립니다). 이 두 가지를 시도해 볼 수 있습니까? 1) newPerson 변수의 변수 이름을 변경합니다. 2) 새로운 Person 객체를 저장할 객관적인 C 모델 만들기 (CFRelease ..에 대해 걱정할 필요가 없도록) – Selvin

+0

newBookerson이 addressBook을 호출하기 위해 선언되었으므로 addressBook에 새 연락처를 추가 할 수 있습니다. 전체 라이브러리는 Apple 튜토리얼 에서조차 C 클래스입니다. 문제는 모든 튜토리얼 프로그램에서 자동으로 연락처를 추가한다는 것입니다. 그러나 주소록을 열고 연락처에 추가 할 내용을 사용자에게 보여주고 싶습니다. 나는 객체가 메모리에 남아 있기 때문에 뷰가 연결되어 있기 때문에 일부 컨트롤러에 문제가 있다고 생각한다. 이전 대답은 컨트롤러 중 하나를 유지하는 것이었지만 처리 방법을 모른다. 힌트 좀있어? –