2010-08-11 5 views
0

WWDC 2010에서 비디오를보고 있었으며 이제 xcode 3.2의 빌드 및 분석 도구의 기능을 파헤 치기 시작했습니다. 런타임시 영향을주지 않을지라도 코딩 실수를 강조하는 훌륭한 도구입니다 (특히 나 같은 신인을 위해!).xcode 관련 질문 작성 및 분석

하지만 이해해야 할 것이 하나 있습니다.

SettingsViewController *nextController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; 

My_AppAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

[delegate.myNavController pushViewController:nextController animated:YES]; 

분석기 나 잠재적 메모리 누수가 말한다 :

는이 코드에 새로운 뷰 컨트롤러를 누르면. 나는 그 방식으로, NextController를 할당하지만 결코 그것을 해제하지 않는다는 것을 이해할 수있다. 하지만 출시하려고하면 앱이 다운됩니다.

시뮬레이터와 물리적 장치에서 Instruments로 분석 할 때 누수가 발생하지 않습니다.

애플은이 앱을 중단 하시겠습니까, 아니면 테스트를 거치겠습니까?

답변

0

애플에 제출하여 통과했습니다.

1

처리되지 않은 메모리 경고 및 충돌로 이어지지 않으면 누설로 인해 거부되지 않을 수도 있습니다. 즉, 언급 한 특정 문제는 autorelease을 사용하여 수정할 수 있습니다.

SettingsViewController *nextController = [[[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil] autorelease]; 

내비게이션 컨트롤러는 수명 동안 뷰 컨트롤러를 유지해야합니다.

+0

제안 해 주셔서 감사합니다. 나는 그것을 테스트했고 빌드와 분석에서 잘 작동하고 처음으로 컨트롤러를 밀 때. 두 번째로 앱을 종료합니다. autorelease와 iOS는 어떻게됩니까? 내가 이해하는 것에서는 iOS에서 가비지 콜렉션이 없다는 것을 알고 있지만 어떤 곳에서는 여전히 autorelease를 참조합니다 ... – Structurer

+0

Apple의 메모리 관리 프로그래밍 가이드를 읽는 것이 좋습니다. 나는 편리한 링크가 없지만 여기에 어떤 의견이라도 더 많은 질문에 답할 것이다. – Justin