内存泄漏与UIModalTransitionStyleFlipHorizo​​ntal

时间:2015-01-01 22:33:26

标签: ios memory-leaks

以模态方式呈现视图控制器时,设置过渡样式似乎会产生内存泄漏。当下面的第三行没有被注释掉时,新的视图控制器没有响应,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];
}

像转换样式这样的东西会导致这一点似乎很奇怪,所以我的猜测是UIModalTransitionStyleFlipHorizo​​ntal的较长转换时间可能导致SettingsPopupViewController中的问题。也就是说,在该对象中注释掉所有viewDidLoad和viewWillAppear代码并没有任何区别。这种过渡风格是否存在任何已知问题?谢谢你的阅读。

更新: 在“仪器”中查看这个问题,可以看到一行有类别" Malloc 272 Bytes"当转换线被取消注释时,它正在稳步增长。

1 个答案:

答案 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);