2009-07-28 5 views
0

NSView가 dealloc 될 때 어떤 방법으로 탐지 할 수 있습니까?NSView가 dealloc 될 때 감지하기

이유는, return/tab 키를 입력 할 수 있도록 -control : textView : doCommandBySelector :를 처리하는 NSTextField 대리인과 같은 간단한 대리인이 있습니다. 이 델리게이트 객체를 코코아 콩에 붙이고 NSTextField의 델리게이트 연결을 연결하여 작동 시키도록하십시오.

그리고 작동하지만 대리자 개체가 누수되므로 연결된 NSTextField가 해제 된 후에도 대리자가 절대로 릴리스되지 않습니다.

대리자 개체를 NSTextField dealloc'ed 때 검색 할 수 싶습니다 있지만 대리자 개체에 별도의 링크를 저장하는 데 남겨두고이 일을 어떤 식으로 생각할 수 없습니다. 다른 컨트롤러에서 가져 와서 이상적이지 않은 지점에서 수동으로 놓으십시오. 어떤 아이디어?

답변

1

나는 이것을 이전에 잘 보아 왔으며, 객체가 할당 해제되었을 때 어떤 관찰 방법도 보이지 않는다. 나는 약한 포인터 클래스에서 그것을 할 수있는 한 가지 방법을 보았지만 isa swizzling이 포함되어있다. http://www.cocoadev.com/index.pl?WeakPointers

nib 파일에서 생성 된 객체는 다른 곳에서 유지되지 않는 한, nib 소유자의 할당이 해제되면 할당을 해제해야합니다. 예를 들어, NSWindowController가 할당 해제되면, nib가로드 될 때 생성 된 모든 객체가 해제됩니다. 대리자 객체의 할당이 해제되지 않은 경우 다른 곳에서 유지되거나 유지주기가 있기 때문일 수 있습니다.

+0

문제는 각 컨트롤러에 코드를 추가하여이 NSTextField 전용 대리자를 알아야 삭제할 수 있기를 원하지 않았기 때문입니다. 내 솔루션은 5 (ick) IBOutlet ivars releaseOnDealloc1..5가있는 수퍼 클래스 컨트롤러를 사용하는 것이 었습니다. 수퍼 클래스에서 dealloc은 각각의 ivars에서 release를 호출합니다. 그런 다음 Interface Builder에서 각 뷰에 대해 방금 연결 한 외부 객체를 다양한 releaseOnDealloc 콘센트에 연결하여 적절한 시점에 릴리스했습니다. 약간의 코드/노력으로 약간 못생긴하지만 효과적입니다. –