2015-02-06 4 views
0

내 dealloc이 ARC에서 호출되지 않기 때문에 약간 혼란 스럽습니다. 내 응용 프로그램에서 스토리 보드를 사용하고 있습니다.ARC + Dealloc이 호출되지 않았습니다.

사례 1 : 내 나는 스토리 보드

사례 2에서 모든 IBOutlet를 사용할 때 호출 dealloc : 내 내가 UIViewControllerallocinit 방법을 사용하려고 할 때 dealloc가 호출되지 않습니다. 아래처럼

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"ProfileDetailView" bundle:nil]; 
     __weak ProfileDetailView *detailview = (ProfileDetailView *)vc.view; 
     detailview.backgroundColor = [UIColor clearColor]; 
     vc = nil; 
....Set value in object..... 

[self.view addSubview:detailview];; 
     detailview = nil; 

dealloc이 호출되지 않은 이유를 설명 할 수 있습니까? 어떻게 dealloc에 전화를 할 수 있습니까?

감사

+1

'_weak'을 사용하고 변수를 nil로 설정하는 것이 더 복잡해집니다. 일반적으로 Objective-C는 객체 수명을 장면 뒤에서 잘 처리합니다. – zaph

답변

1

는 ARC의 개념은 객체의 가 할당이 해제 될 때까지 이론적 위해 일을해야한다 수를 유지한다는 것이다. 당신이 실행하면 :

[self.view addSubview:detailview];; 

귀하의 self.view 단위를가 view.subviews에 추가 할 때 detailview 's은 (는) 1 수를 유지합니다. self.viewdetailview를 제거 할 때 논리적으로, 상기 유지 카운트 다시

1 씩 감소되어, 이는 이론적 사시도이다. 현실은 대개 다음과 같습니다.

미성년자.

신비한 Objective-C 런타임이 어떻게 작동하는지 아무도 모릅니다! (전체 소스 코드에 대한 농담은 온라인에서 가능합니다.)

+0

답장을 보내 주셔서 감사합니다.하지만 제 경우에는 그런 일이 일어나고 있습니다 ... 그리고 내보기 컨트롤러를 터뜨린 후에도 메모리가 남아 있습니다. 예, 당신 말이 맞습니다. 제 생각에는 그것을 제거해야합니까? – Hindu

+0

'detailview'는'_weak'이고'vc'는 해제됩니다.'detail view'가 가리키는 곳에는 retain이 없습니다. 그것은'addSubview'에 추가 될 때까지 죽었습니다. – zaph

+0

@Zaph : 어떻게 죽었나요? 'detailview = nil;'은'[self.view addSubview : detailview] ;; ' –

0

답장을 보내 주셔서 감사합니다. 컨트롤러를 볼 때 내 dealloc 함수를 호출 할 수 있습니다. 그것을 달성하기 위해, 우리는 사용자가 뒤로 버튼을 가볍게 칠 때 내 뷰에서 추가 된 하위 뷰를 제거해야합니다.