Почему один и тот же код будет отличаться в 3 раза по производительности в viewDidLoad и задаче задержки - PullRequest
0 голосов
/ 04 июля 2019

Я тестирую производительность макета TextKit на iPhone7 iOS13 ,, но обнаружил, что тот же код имеет разную производительность.

Тестовый код можно увидеть ниже , время, потраченное в методе теста viewDidLoad, составляет 0,305мс, 0,082 мс, 0,062 мс соответственно, и время, затраченное на задание задержки, составляет 1,018 мс, 0,425 мс, 0,462 мс.

Я сократил код в методе теста, эта проблема все еще существует, эта проблема имеетНичего общего с TextKit.


- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.navigationItem.title = @"Demo";
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];

    [self test];
    [self test];
    [self test];

    double delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        // Each test call takes more than 3 times more time than the test call in viewDidLoad
        [self test];
        [self test];
        [self test];
    });
}


- (void)test
{
    NSTimeInterval startTime = [[NSDate new] timeIntervalSinceReferenceDate];
    NSTextContainer* textContainer = [[NSTextContainer alloc] init];
    textContainer.exclusionPaths = @[];


    NSLayoutManager * layoutManager = [NSLayoutManager new];
    layoutManager.allowsNonContiguousLayout = false;
    layoutManager.hyphenationFactor = 0;
    layoutManager.showsInvisibleCharacters = false;
    layoutManager.showsControlCharacters = false;
    layoutManager.usesFontLeading = true;
    [layoutManager addTextContainer:textContainer];

    NSTextStorage* textStorage = [[NSTextStorage alloc] initWithString:@"h"];

    [textStorage addLayoutManager:layoutManager];
    NSTimeInterval endTime = [[NSDate new] timeIntervalSinceReferenceDate];
    NSLog(@"Test generate cost in %f ms", (endTime - startTime) * 1000.0);
}

Я хочу знать, что вызвало разницу в производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...