Я тестирую производительность макета 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);
}
Я хочу знать, что вызвало разницу в производительности.