我AppDelegate
维护了一个活动窗口控制器列表,以避免 ARC 过早地释放它们。所以我有一个这样的通知处理程序:
- (void) windowWillClose: (NSNotification*) notification {
[self performSelectorOnMainThread: @selector(removeWindowControllerInMainThread:)
withObject: windowController
waitUntilDone: NO];
}
- (void) removeWindowControllerInMainThread: (id) windowController {
[windowControllers removeObject: windowController];
}
我使用主线程是因为在通知线程上进行处理可能会在控制器准备好之前释放控制器。
现在,这工作得很好——除非当前有动画师正在运行。我在某些地方使用动画师,通过NSAnimationContext
. 我看过这个 QA,答案是不可接受的。等一会,只是为了做动画,真的是粗制滥造,不保证能干;确实没有。我尝试使用performSelector:withObject:afterDelay
,即使延迟大于当前动画持续时间,它仍然会导致动画师针对 nil 对象运行。
像这样进行控制器清理的首选方法是什么?不使用NSAnimationContext
而是使用NSAnimation
,哪个有stopAnimation
方法?