Медленный запуск приложения - PullRequest
1 голос
/ 10 октября 2010

Мое приложение для 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 ]

7 голосов
/ 10 октября 2010

Похоже, у вас есть очень большой исходный файл xib, который читается и анализируется при запуске, чтобы заполнить mathRootViewController и т. Д.

Попробуйте подождать, пока вам не понадобятся контроллеры, прежде чем загружать их, т.е. поместить их в отдельный xib-файл и добавить методы, которые выглядят примерно так

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

и каждый раз, когда вы используете контроллер, не просто используйте mathRootViewController ;, используйте вместо него [self mathRootViewController ] - этот шаблон будет ждать до тех пор, пока вам в первый раз не понадобится контроллер представления для его создания.

2 голосов
/ 20 декабря 2010

Итак, вы просто подозреваете , что приведенный выше код является медленным?То есть, вы добавили вызовы NSLog, чтобы увидеть, когда ввели didFinishLaunchingWithOptions и когда он вернулся?Просто добавив несколько NSLog между несколькими вышеприведенными строками, вы быстро покажете, где он застрял, не правда ли?

Кроме того, помните, что функции init ... сначала вызывают, и + initializeв других файлах тоже.Добавьте туда NSLogs, чтобы увидеть, будут ли они вызваны до выполнения didFinishLaunchingWithOptions, чтобы определить, тратит ли кто-нибудь время впустую.

2 голосов
/ 10 октября 2010

Сначала я бы подтвердил ваше предположение о том, что эта функция действительно медленная - используйте профилировщик - Инструменты - Сэмплер процессора - чтобы увидеть, какая информация о синхронизации показывается этой функцией, и сравнить ее с другими, поскольку что-то еще может замедлять процесс.

Как только вы подтвердите свои предположения и вам понадобится больше деталей, вы можете добавить очень точную синхронизацию, используя "mach_absolute_time".Сообщите разницу во времени в конце с NSlog.Не делайте слишком много журналирования, так как это может ухудшить производительность.

2 голосов
/ 10 октября 2010

Запускаете ли вы приложение на своем iPhone через Xcode? Приложения, как правило, запускаются очень медленно. Попробуйте запустить приложение на самом iPhone, без использования Xcode.

0 голосов
/ 28 октября 2016

Запустите приложение с переменной среды DYLD_PRINT_STATISTICS, установленной на 1, на фазе запуска медленной цели вашего приложения, чтобы получить распечатку о том, что медленно в процессе запуска. Распечатка будет выглядеть примерно так:

    Total pre-main time: 2.2 seconds (100.0%)
     dylib loading time: 1.4 seconds (64.5%)
    rebase/binding time: 205.99 milliseconds (9.2%)
        ObjC setup time:  84.90 milliseconds (3.8%)
       initializer time: 496.64 milliseconds (22.3%)
       slowest intializers :
         libSystem.B.dylib :  21.82 milliseconds (0.9%)
      libglInterpose.dylib : 156.49 milliseconds (7.0%)
     libMTLInterpose.dylib :  47.01 milliseconds (2.1%)
                   AppName : 224.40 milliseconds (10.0%)

Apple рекомендует 400 миллисекунд.

Источник: Используй свой хлеб

0 голосов
/ 19 декабря 2010

Попробуйте приложение без всего управляемогоObjectContext и посмотрите, запускается ли оно быстрее. Если это так, то задайте значение управляемогоObjectContext только тогда, когда открывается представление, в котором оно вам необходимо. Если время начала остается прежним, то это должно быть что-то с вашим файлом.

0 голосов
/ 10 октября 2010

Если он выполняет какую-либо обработку, которая требует времени, порождает новый поток и выполняет эту работу в фоновом потоке.

...