以模态方式呈现视图控制器时,设置过渡样式似乎会产生内存泄漏。当下面的第三行没有被注释掉时,新的视图控制器没有响应,XCode的Debug Navigator中的内存指示器稳步爬升,最终应用程序崩溃。当该行被注释掉时,它可以正常工作。
- (IBAction)settingsPressed:(id)sender {
SettingsPopupViewController *pvc=[[SettingsPopupViewController alloc] init];
pvc.partyPlanName=[self partyPlanName];
//pvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
pvc.modalPresentationStyle = UIModalPresentationFormSheet;
pvc.delegate=self;
[self presentViewController:pvc animated:YES completion:nil];
}
像转换样式这样的东西会导致这一点似乎很奇怪,所以我的猜测是UIModalTransitionStyleFlipHorizontal的较长转换时间可能导致SettingsPopupViewController中的问题。也就是说,在该对象中注释掉所有viewDidLoad和viewWillAppear代码并没有任何区别。这种过渡风格是否存在任何已知问题?谢谢你的阅读。
更新: 在“仪器”中查看这个问题,可以看到一行有类别" Malloc 272 Bytes"当转换线被取消注释时,它正在稳步增长。
答案 0 :(得分:0)
问题是iOS8特有的,是由于在viewWillLayoutSubviews中调整模态视图的大小所致。通过添加iOS版本检查,问题得到解决:
- (void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0){
self.view.superview.bounds = CGRectMake(0, 0, 366, 553);
}
}
要在iOS8设备上设置模态视图控制器的大小,我使用了调用对象中的以下代码(就在调用presentViewController之前):
modalViewController.preferredContentSize = CGSizeMake(366, 553);