Iphone iOS+中的多个故事板;内存管理
我在我的iOS6/iOS6应用程序中混合了多个故事板和NIB文件 内存管理如何处理多个故事板?Iphone iOS+中的多个故事板;内存管理,iphone,memory-management,ios6,uistoryboard,Iphone,Memory Management,Ios6,Uistoryboard,我在我的iOS6/iOS6应用程序中混合了多个故事板和NIB文件 内存管理如何处理多个故事板? 在启动故事板a时,如果我返回到另一个nib文件/转到另一个故事板,那么该故事板a是否只是停留在内存中 我是否能够像使用UIViewController获取导航控制器堆栈中的视图数组那样,获取堆栈中故事板的“数组” 对于内存管理,我可以从内存中弹出或删除情节提要吗?当我转到另一个故事板时,是否将其设置为零 我将多个故事板与nib文件混合使用的原因: 我想要复杂的故事情节板流程。把他们都扔到一个地方
- 在启动故事板a时,如果我返回到另一个nib文件/转到另一个故事板,那么该故事板a是否只是停留在内存中
- 我是否能够像使用UIViewController获取导航控制器堆栈中的视图数组那样,获取堆栈中故事板的“数组”
- 对于内存管理,我可以从内存中弹出或删除情节提要吗?当我转到另一个故事板时,是否将其设置为零
- 我想要复杂的故事情节板流程。把他们都扔到一个地方是没有意义的李>
- 最终,我将与许多不同的人一起工作,我发现团队合作、版本控制的理由足以让我选择多故事板路线
- 我混合使用NIB文件是因为故事板还不能处理复杂的NIB文件、许多编程视图等
情节提要由您创建的UIViewController(通过
情节提要
)属性保留。所以是的,它会一直保存在内存中,直到它的所有视图控制器都被释放。查看(简介)
我是否能够像使用UIViewController获取导航控制器堆栈中的视图阵列那样获取堆栈中故事板的“阵列”?不,因为故事板是相互独立的。但是,您可以通过迭代导航堆栈中的视图控制器来获取故事板 对于内存管理,我可以从内存中弹出或删除情节提要吗?当我转到另一个情节提要时,是否将其设置为零?
只要内存中有实例化的视图控制器,它就会一直存在。当您使用名为:的故事板时,自动删除的对象将返回给您。视图控制器将保留它,因此不必担心释放或设置为nil 关于您的其他问题,请参考SO和互联网的其他部分:
愉快的故事板。听起来您在试图避免在内存中保留不必要的视图控制器。这是一件需要避免的事情,因为视图控制器很大,因为它们引用了很多其他对象。您的问题听起来好像您担心右舷引用了故事板中的所有视图控制器,因此也保留了所有视图控制器。事实并非如此。storyboard对象只是对应用程序包的resources目录中的文件的引用,每次要求它创建新的视图控制器时,它都会从这些资源中实例化一个新的视图控制器。例如,它可以从情节提要多次实例化同一模板视图控制器。在实例化任何实时视图控制器之后,它都不会保留这些控制器 听起来您好像在试图避免在内存中保留不必要的视图控制器 重要的是要认识到,一旦脚本被实例化,它将在应用程序的生命周期中一直保存在内存中。如果这不是您想要的,那么您可以将静态常量属性转换为静态计算属性。创建情节提要的扩展,这与您可以应用于视图控制器的内容相同,从而使应用程序内存干净
import UIKit
extension UIStoryboard {
static var main: UIStoryboard {
return UIStoryboard(name: "Main", bundle: Bundle.main)
}
}非常感谢MishieMoo!这帮了大忙。如果有人回答了你的问题,一定要接受答案=)谢谢Jon!我按照建议做了日志,计算了导航堆栈数组中视图控制器的数量。你现在说的有道理了!
- (IBAction)anotherStoryboardBtnPressed:(id)sender {
// I'm inside a storyboard right now. I'm calling another storyboard.
// can i remove this storyboard before i launch the otherone? will keeping 2 or 3 toryboards in memory cause a memory leak?
UIStoryboard *settingsStoryboard = [UIStoryboard storyboardWithName:@"AnotherStoryboard" bundle:nil];
UIViewController *initialSettingsVC = [settingsStoryboard instantiateInitialViewController];
// i'm going to load this view controller modally
// initialSettingsVC.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;
[self presentViewController:initialSettingsVC
animated:YES
completion:nil];
}
import UIKit
extension UIStoryboard {
static var main: UIStoryboard {
return UIStoryboard(name: "Main", bundle: Bundle.main)
}