2011-02-09 4 views
1

나는 앱에서 작업 해왔고, 내가 읽은 책은이 문장을 viewDidUnload 및 dealloc 메소드에 넣으라고했다. 여기에 어떤 다른 정보가 있어야합니까? 내 프로그램에는 버튼과 라벨이 있습니다. 나는 그들을 위해 무엇인가해야합니까?iPhone 메소드 질문 (dealloc 및 viewDidUnload)

효율적으로 실행되는 응용 프로그램이 필요합니다.

여기 내 코드입니다 :

- (void)viewDidUnload { 
     // Release any retained subviews of the main view. 
     // e.g. self.myOutlet = nil; 
     self.doublePicker = nil; 
     self.color = nil; 
     self.choice = nil; 
     [super viewDidUnload]; 
    } 

    - (void)dealloc { 
     [doublePicker release]; 
     [color release]; 
     [choice release]; 
     [super dealloc]; 
    } 

답변

2

viewDidUnload에서 IBOutlet 및 기타 UI 요소 만 릴리스해야합니다. 뷰 컨트롤러 (IBOutlets뿐만 아니라)에 할당 한 다른 모든 데이터는 dealloc 메소드에서 해제되어야합니다. 뷰 컨트롤러의 수명 동안 뷰를 여러 번로드하고 언로드 할 수 있기 때문입니다. 예를 들어,보기가 표시되지 않으면보기를 언로드 할 수 있지만보기 제어기의 뒤에있는 데이터는 여전히 메모리에 보관해야합니다. 뷰와 컨트롤러가 더 이상 필요하지 않을 때, dealloc 메소드가 호출됩니다.

0

일반적인 규칙은 당신은 아무것도에 release를 호출 할 것입니다 당신 alloc 또는 init. xib에서 생성 한 구성 요소는 배포 할 필요가 없습니다.

+0

나는 항상 당신이 소유하도록 설정된 IBOutlet을 해제해야한다고 생각했습니다. 뷰로드는 KVC를 사용하여 IBOutlet을 연결하고 가능한 경우 속성을 사용합니다. – Rengers

+0

(just) init? mhm ... 확실하지는 않습니다 ... 저는 "alloc"과 "copy"를 기억하고 있습니다 ... 그러나 당신은 아주 좋은 설명을 많이 볼 수 있습니다. – meronix

+0

'init'은 보유 수를 늘리지 않으며,'allocWithZone :'은'retain'과'copyWithZone :'뿐입니다. 그리고 당신은 * 당신의 펜촉을 공개해야합니다. – Costique

1

당신이 게시 코드는 정확하지만 당신은 또한과 같이, 당신의 콘센트에 대한 속성을 만들어야합니다

당신의 .H 파일 : 당신의하는 .m 파일에

@property (nonatomic, retain) UIPickerView *doublePicker; 
@property (nonatomic, retain) UIPickerView *color; 
// ...etc 

:

@synthesize doublePicker; 
@synthesize color; 
// ...etc 

이 기술에 대한 토론이 있습니다 (예 : 아웃렛을 명시 적으로 유지하고 이와 같이 풀어주는 방법). Apple이 권장하는 기술입니다.

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html#//apple_ref/doc/uid/TP40004998-SW2