NSWindowController에서 이상한 상황이 발생합니다. 윈도우 컨트롤러를 공개하고 싶지만 그렇지는 않습니다. ARC 동작에 대한 제 기대치를 따르지 않는 것 같습니다.NSWindowController 하위 클래스가 ARC에서 해제되지 않습니다.
간단한 윈도우 컨트롤러 하위 클래스 인 PlainWindowController를 만들었습니다. 그것의 인터페이스와 구현은 비어 :
#import <Cocoa/Cocoa.h>
@interface PlainWindowController : NSWindowController
@end
@implementation PlainWindowController
@end
내가 그것으로 이미 설정 위임 및 windowController 연결과 창문이 windowController가 PlainWindowController.xib
이름 XIB 기본을 만들었습니다. 이 테스트 실행이 약한 참조가 전무없는 경우
PlainWindowController *strongWindowController = [[PlainWindowController alloc] initWithWindowNibName:@"PlainWindowController"];
__weak PlainWindowController *weakWindowController = strongWindowController;
[strongWindowController showWindow:nil];
strongWindowController = nil;
STAssertNil(weakWindowController, @"The window controller should have been deleted, wasn't");
:
테스트에서이 코드를 작성했습니다.showWindow
을 생략하면 0이됩니다. initWithWindowNibName
대신 init
을 사용하면 nil입니다.
여기에 무슨 일이 일어나는 지 아는 사람이 있습니까? 사전 안내에 감사드립니다.
설명해 주셔서 감사합니다. 사실, 아무런 강력한 참조없이 일반 응용 프로그램에서 펜촉을 어딘가에 초기화하면 알 수없는 시간에, 그러나 신속하게 dealloc을 수행합니다. ARC에 의해 제공되는 새로운 컨트롤이 여전히 오토 레이스 뒤에서 숨겨져 있다는 것은 너무 나쁩니다. – stevel