我有一个非常奇怪的情况:由presentViewController
调用的视图控制器需要花费大量时间来加载。我的意思是准备阶段需要花费很多时间,尽管整个动画执行得很快。从提供的控制器返回到前一个控制器很好。
我有什么线索?
首先,我在第一个viewWillAppear
准备我的下一个视图控制器:
METAddEventViewController *controller = [self.storyboard
instantiateViewControllerWithIdentifier:@"addEventView"];
self.nextController =
[[UINavigationController alloc] initWithRootViewController:controller];
其中self.nextController
非原子且强大。
所以,我调用下一个控制器的方法非常简单:
- (IBAction)addMeetingButtonPressed:(id)sender {
[self.addMeetingButton setImage:[UIImage imageNamed:@"addMeeting-pressed@2x.png"] forState:UIControlStateNormal];
[self presentViewController:self.nextController animated:YES completion:^{
NSLog(@"Completed");
}];
}
METAddEventViewController
仅为UITableViewController
,静态单元格为4:2基本单元格,1个单元格为UIDatePicker
,1个单位为UITextView
。
所以,我的viewDidLoad
和viewWillAppear
:
- (void)viewDidLoad
{
self.appointMeetingButton.enabled = NO;
self.title = @"Create Meeting";
self.commentaryView.delegate = self;
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:NO animated:NO];
self.commentaryView.text = @"Enter comment for the meeting if needed";
self.commentaryViewFilled = NO;
self.commentaryView.textColor = [UIColor lightGrayColor];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateSelectedPersonCalled:)
name:@"updateSelectedPersonLabel"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateSelectedPersonCalled:)
name:@"updateSelectedLocationLabel"
object:nil];
[self.datePicker addTarget:self action:@selector(meetingAppointable) forControlEvents:UIControlEventValueChanged];
}
我运行了Profiling,发现最耗时的操作是分配操作。但是,viewDidLoad
的{{1}}和viewWillAppear
都很好 - 大约10毫秒。 他们中的大部分时间都需要配置METAddEventController
我该怎么办?我可以提供哪些附加信息来找到解决方案?