2011-02-26 4 views
1

Objective-C를 사용하여 iPhone 코드를 작성하는 방법을 배우고 있는데 사용하는 시점에 뷰 컨트롤러를 릴리스해야하는 이유를 잘 모르겠습니다. 내비게이션 제어기가 이미 상세보기 제어기 유지 미리사용중인 뷰에서 메모리 관리

답변

1

아래의 내용은 다음과 같습니다. 로컬 메모리 관리를 담당하고 API 클래스의 메모리를 관리 할 필요가 없다는 점에 대해 걱정할 필요가 없습니다. 그들은 자신의 기억을 관리합니다. 목표 - C의 메모리 관리와 함께 기억해야 할

어떤 것들은 :

  • 코코아 터치 클래스는 당신이 그것을주는 일을 유지하기위한 책임이 있습니다. 보기에 하위보기를 추가 하시겠습니까? 뷰는 자체적으로 뷰를 유지합니다. 보기 컨트롤러를 탐색 컨트롤러로 밀어 넣으시겠습니까? 네비게이션 컨트롤러는 뷰 컨트롤러가 스택에서 튀어 나올 때까지 유지합니다.
  • 반대로 alloc, copy, new 및/또는 retain을 호출 할 때마다 해당 릴리스 또는 자동 릴리스가 있어야합니다. 위의 코드에서 alloc을 호출하여 뷰 컨트롤러를 만들었으며 어느 시점에서 해제 할 책임이있는 보유 개수 1을 지정했습니다.
  • 는 점 표기법으로 객체 속성을 사용하여 속성을 복사하거나 (당신이 원하는 일반적으로 무엇을) 속성을 유지하는 경우,이 작업을 수행하지 않습니다

    self.property = [[WhateverObject ALLOC] 초기화를 ];

    대신

, 이렇게 :

self.property = [[[WhateverObject alloc] init] autorelease; 
3

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil]; 

    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
} 

덕분에 따라서, 유지 수가 그 시점에서 2이다. 이 릴리즈는 보유 개수를 1로 만들 것입니다.