应用启动缓慢

时间:2010-10-09 20:57:51

标签: iphone xcode uiapplication

我的iphone应用程序启动非常缓慢,我不知道为什么。我的application:didFinishLaunchingWithOptions:并不重,我只是为我的标签栏控制器的五个视图控制器中的每一个设置了managedObjectContext。

有没有人知道是什么原因导致发射缓慢?感谢。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    mathRootViewController.managedObjectContext = self.managedObjectContext;
    favoriteRootViewController.managedObjectContext = self.managedObjectContext;
    chemistryRootViewController.managedObjectContext = self.managedObjectContext;
    physicsRootViewController.managedObjectContext = self.managedObjectContext;
    shareRootViewController.managedObjectContext = self.managedObjectContext;

    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];


    return YES;
}

7 个答案:

答案 0 :(得分:7)

看起来你有一个非常大的初始xib文件,它在启动时被读取和解析,以填充mathRootViewController等。

尝试等待,直到你需要控制器才能加载它们,即将它们放在一个单独的xib文件中并添加看起来有点像这样的方法

- (UIViewController *)mathRootViewController {
    if (nil === mathRootViewController) {
        mathViewController = [[MathViewController alloc] initWithNibName:@"MathViewController" bundle:nil];
        [mathViewController setManagedObjectContext:[self managedObjectContext]];
    }
    return mathRootViewController;
}

每次使用控制器时,不要只使用mathRootViewController ;,而是使用[self mathRootViewController ] - 此模式将等到第一次需要视图控制器创建它时。

答案 1 :(得分:2)

您是否通过Xcode在iPhone上运行应用程序?当以这种方式运行时,应用往往会非常缓慢地启动尝试在iPhone上启动应用程序,而不使用Xcode。

答案 2 :(得分:2)

首先,我要确认你的假设,这确实是一个很慢的功能 - 使用探查器 - 仪器 - CPU采样器 - 查看功能显示的时序信息,并将其与其他人进行比较,因为其他东西可能会减慢速度。

一旦确认了您的假设并且需要更多细节,您可以使用“mach_absolute_time”添加非常精细的时间。最后用NSlog报告时间差异。不要做太多的日志记录,因为这也会影响性能。

答案 3 :(得分:2)

那么,你只是怀疑上面的代码是什么慢?是,您是否添加了NSLog调用以查看何时输入didFinishLaunchingWithOptions以及何时返回?只需在以上几行之间添加一些NSLog,就可以快速显示它被卡住的地方,你不觉得吗?

另外,请注意首先调用init ...函数,并在其他文件中初始化。在那里添加NSLog,以查看它们是否在didFinishLaunchingWithOptions之前被调用,以发现它们是否浪费时间。

答案 4 :(得分:0)

如果它正在进行任何类型的处理,需要一段时间产生一个新线程,并在后台线程上执行此操作。

答案 5 :(得分:0)

在没有整个managedObjectContext的情况下尝试应用程序,看看它是否启动得更快。如果是,则仅在视图打开时才设置managedObjectContext。如果开始时间保持不变,那么应该是你的nib文件。

答案 6 :(得分:0)

在应用程序缓慢目标的运行阶段启动div > a:hover { text-decoration:none; } 环境变量设置为DYLD_PRINT_STATISTICS的应用程序,以打印出启动过程中缓慢的内容。打印输出看起来像:

1

Apple推荐400毫秒。

来源:Use Your Loaf