У меня есть основанное на документе приложение Какао, которое подклассов NSDocument
как MyDocument
.Каждый MyDocument
управляет отдельным фоновым процессом (как NSTask
).Я хочу убедиться, что NSTask
завершается при закрытии соответствующего MyDocument
или при завершении всего приложения.
Для последнего я заставляю документ соблюдать NSApplicationWillTerminateNotification.
Для первого я переопределяюclose
метод:
-(void)close {
// Cleanup code here
[super close];
}
(Кстати, я не могу поместить код очистки в метод dealloc
, так как проект GC'd.)
Проблема заключается в следующем: Если я открою MyDocument
, внесу несохраненные изменения, а затем нажму cmd-Q, метод close
будет вызываться дважды .От отладчика цепочка вызовов: [MyDocument close]
вызывает [NSDocument close]
, что вызывает [NSWindowController _windowDidClose]
, что снова вызывает [MyDocument close]
.(После этого вызова приложение закрывается).
Это ожидаемое поведение?Если это так, есть ли лучший способ освободить ресурсы для конкретных документов?Или я должен просто сделать close
безопасным для многократного запуска?