在调查内存泄漏时,我发现了一个与setRootViewController:在转换动画块中调用技术相关的问题:
[UIView transitionWithView:self.window
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ self.window.rootViewController = newController; }
completion:nil];
Run Code Online (Sandbox Code Playgroud)
如果旧视图控制器(正在替换的视图控制器)当前正在呈现另一个视图控制器,则上述代码不会从视图层次结构中删除呈现的视图.
也就是说,这一系列操作......
transitionWithView:使Z中的新根视图控制器...对用户看起来没问题,但Debug View Hierarchy工具将显示Y的视图仍然在Z的视图后面,在a UITransitionView.也就是说,在上面的三个步骤之后,视图层次结构是:
我怀疑这是一个问题,因为在转换时,X的视图实际上不是视图层次结构的一部分.
如果我dismissViewControllerAnimated:NO之前发送到X transitionWithView:,则生成的视图层次结构为:
如果我向dismissViewControllerAnimated:X 发送(是或否),然后在completion:块中执行转换,则视图层次结构正确.不幸的是,这会干扰动画.如果动画解雇,那就浪费时间; 如果没有动画,它看起来很破碎.
我正在尝试其他一些方法(例如,创建一个新的容器视图控制器类作为我的根视图控制器),但没有找到任何有效的方法.我会去的时候更新这个问题.
最终目标是直接从呈现视图转换到新的根视图控制器,而不会留下杂散视图层次结构.
我有一个用Swift写的iOS应用程序泄漏内存 - 在某些情况下应该释放一些对象,但事实并非如此.我通过简单地添加如下deinit调试消息来了解这个问题:
deinit {
println("DEINIT: KeysProvider released")
}
Run Code Online (Sandbox Code Playgroud)
因此,在应该导致对象释放的此类事件之后,deinit消息应该存在于控制台中.但是,对于应该释放的某些对象,消息将丢失.仍然,Leaks Developer Tool没有显示任何泄漏.我该如何解决这种情况?
memory-leaks memory-management ios automatic-ref-counting swift