Iphone iOS5如何;懒散地;是否初始化选项卡栏的控制器?
我有一个TabBar控制器,最多有9个控制器,每个控制器都有一个导航控制器。目前,我在Iphone iOS5如何;懒散地;是否初始化选项卡栏的控制器?,iphone,objective-c,ios5,lazy-loading,uitabbar,Iphone,Objective C,Ios5,Lazy Loading,Uitabbar,我有一个TabBar控制器,最多有9个控制器,每个控制器都有一个导航控制器。目前,我在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{...} 这使得我的应用程序在第一次启动时需要相当长的时间才能启动。我希望通过延迟初始化来减少初始加载时间 当第一次为选项卡栏选择视图控制器时,是否有办法“延迟”初始化它们 查看iOS5的故事
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{...}
这使得我的应用程序在第一次启动时需要相当长的时间才能启动。我希望通过延迟初始化来减少初始加载时间
当第一次为选项卡栏选择视图控制器时,是否有办法“延迟”初始化它们
查看iOS5的故事板是否有助于解决这个问题
谢谢大家! 将控制器定义为惰性控制器怎么样 我的意思是,如果由于九个视图控制器的初始化,应用程序需要一些时间才能启动,那么这与控制器在初始化时的实际操作有关。因此,您可以分两步使控制器惰性地初始化:第一步,将所有控制器添加到选项卡栏控制器时;第二,当您选择一个特定的选项卡时,相应的控制器就会初始化 我认为这是最干净的方法 否则,我会直接使用
UITabBar
在您自己的选项卡栏控制器类中管理它
作为最后一个选项,我将根据一些逻辑在适当的时间调用setViewControllers:animated:
,尝试动态更改选项卡栏控制器的内容。例如,您可以在应用程序:didFinishLaunchingWithOptions:
中仅使用5个视图控制器初始化选项卡栏控制器,然后稍后添加其余的视图控制器
但我的实际建议是让组件控制器变得懒惰
编辑:阅读评论中的问题后
如果您想尝试延迟控制器的初始化,我的意思是:
init
方法将控制器初始化为默认状态,如设置属性和ivar值,并且不执行更复杂的操作init
方法的内容不明确
至于第3点,您有几个关于在何处完成初始化的选项
可能是控制器即将显示时。在这种情况下,您可以在选项卡栏控制器委托中定义-tabBarController:didSelectViewController:
,或者使用viewwillbeen
。这将为您提供最延迟的初始化,但在视图出现之前选择选项卡的确切时刻可能会增加一些延迟
更好的方法是使用viewDidLoad
,这样可以减少延迟初始化;所有控制器的初始化都会发生在您无法控制的某个时间点(当然,在显示视图之前),因此可能会稍微延迟一些时间,但不会发生在applicationdFinishLoading
中,而且会更方便用户界面,因为它将由主循环控制。当然,第一个选择是尝试。另请查看中的viewDidLoad
说明
最后是关于独立线程的注释。请记住,从单独的线程使用
UIKit
并非完全安全,因此要小心。在UIViewController的实现中,在方法中创建所有视图
- (void)viewDidLoad
并避免在init方法中创建视图(甚至更糟的是获取数据)
UITabBarController或UINavigationController默认情况下会在用户看到viewDidLoad之前调用它。感觉像是在这个问题上添加了一个快速的.02。正如其他人所指出的,UIViewController初始化和加载过程已经是“懒惰的”。真正的问题是,在花了这么长时间的初始化过程中,您在做什么?即使加载视图也不会花费很长时间,因为您不希望用户在点击选项卡时等待视图更改。我建议如下:
loadView
或viewDidLoad
中创建所有视图/子视图viewDidLoad
中执行此操作。如果加载数据需要很长时间,请在后台加载数据它应该不会花那么长的时间来分配初始化您的ViewController。您可能需要对它们进行优化,并确保这些ViewController延迟加载其资源。。。提示:ViewDidAppari认为以编程方式创建视图的合适位置是
-[UIViewController loadView]
,而不是-[UIViewController viewDidLoad]
。在Xcode 4.x中,创建新的UIViewController子类时,我得到的只是init和viewDidLoad。我可以确认viewDidLoad被延迟调用。关于动态设置视图控制器的好主意!我注意到,由于我的控制器在“更多”选项卡上溢出,用户可以选择编辑控制器的顺序。我不知道通过应用程序重新启动,订单重新排列是否会持续。如果是这样的话,这是一个很酷的特性,我不想丢失。我所有的视图控制器都是从NIB创建的,并且有很多委托正在进行。如果我错了,请纠正我,一个只被分配的对象只是一堆内存,所以我还不能分配它的属性。其中一件事