2011-01-18 4 views
0

release 여기로 전화해야하나요? 내가있는 tableview에서 didSelectRowAtIndexPath에서보기를로드하고iPhone 메모리 관리

... 내가 [eventDetailedViewController release];를 호출해야하고 그럴 필요로 할 때 [eventDetailedViewController release] 전화를

EventDetailedViewController *eventDetailedViewController=[[EventDetailedViewController alloc]initWithNibName:@"EventDetailedViewController" bundle:nil]; 
     eventDetailedViewController.aEventInfo=aEventInfo; 
     [self.navigationController pushViewController:eventDetailedViewController animated:YES]; 
    // [eventDetailedViewController release]; 
     eventDetailedViewController=nil; 

. 있는 tableview에서 didSelectRowAtIndexPath ...

편집 :

내가 그것을 선택하면 세 가지보기를 수행 먼저 펜촉을로드합니다. 처음부터 두 번째 펜촉 파일을로드합니다. 두 번째에서 세 번째 펜촉 파일을로드합니다. 내가 3 번째에서 2 번째로 돌아 왔을 때, 내 응용 프로그램이 충돌합니다 ... 저는 첫 번째 View Controller를 발표 할 예정이라고 생각합니다.

+0

aEventInfo는 UIEvent입니까? 그렇다면 EventDetailedViewController의 aEventInfo 속성이 더 좋습니다. [이벤트 객체를 유지하는 것이 아니라 복사하십시오] (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIEvent_Class/Reference/Reference.html#// apple_ref/occ/cl/UIEvent). – outis

답변

0

eventDetailedViewController (이 값을 nil로 설정)를 사용하지 않으므로 해제해야합니다. UINavigationController의 pushViewController 메서드는 객체를 유지하므로 navigationController가 더 이상 필요하지 않을 때까지 해제되지 않습니다.

이 값을 nil로 설정하면이 값을 nil로 설정하면 이전 값이 해제되는 비 구조적 속성 인 경우에만 유용합니다. 로컬 변수이므로 해제해야합니다.

2

Apple의 memory management rules은 매우 간단합니다. alloc/new/copy */retain에 대한 모든 호출은 auto/release 호출을 통해 균형을 이루어야합니다. 전자를 호출하는 객체 (코드 블록)에는 소유권이 있습니다. 소유주가 더 이상 소유 된 객체를 필요로하지 않으면 그것을 해제하십시오. 예를 들어, self.navigationController은 네비게이션 컨트롤러의 스택에서 컨트롤러가 팝 될 때까지 푸시 뷰 컨트롤러 (소유권 주장)를 유지합니다. 이 간단한 (--istic?) 설명에서 제외되는 유일한 것은 weak references을 사용해야 할 때입니다 (retain cycles을 방지하는 데 필요합니다).

eventDetailedViewController은 로컬 변수이므로 eventDetailedViewController을 소유 한 코드 블록입니다. 변수가 정적이 아니기 때문에 블록이 종료되고 그 블록이 그 객체를 사용할 수 없으면 그 변수는 폐기 될 것이므로 객체를 해제해야합니다.

+0

@Outis. 나는 3 개의 전망이있다 나는 그것의 짐 첫번째 전망 관제사를 선택할 때. 첫 번째로드의 두 번째보기에서 두 번째로드의 두 번째보기에서로드 세 번째. 내가 세 번째에서 두 번째로 돌아올 때. 내 응용 프로그램 충돌 ..... 내 첫 번째보기 컨트롤러를 해제하는 것으로 인해 생각하고있어 .... –

+0

@kiran는 dealloc 메서드의 코드를 제공합니다. – Ishu

+0

- (void) dealloc { \t [categorieArray release]; \t [nearbyDetailedViewController 릴리스]; \t [eventListController release]; [super dealloc]; } 이제 dealloc 메소드에 추가했습니다. –