使用EKEventEditViewController导致内存泄漏?

时间:2013-08-10 22:17:49

标签: iphone ios objective-c memory-leaks eventkit

我正在使用EKEventEditViewController的实例,因此我可以编辑所选的事件。通过eventEditViewController:didCompleteWithAction:解除控制器后,我注意到我的内存使用量没有下降。 EventEditViewController的每次后续使用都会增加我的内存使用量,而且永远不会再降低。我的应用程序开始使用了4.2mb的内存。如果我只是在我的tableview中选择一个单元格,显示事件编辑控制器,关闭事件编辑控制器并多次重复该过程,我的设备上使用的内存量增加到超过10mb。

有人可以告诉我是否有什么我做错了吗?好像我在泄漏记忆。我正在使用ARC并且具有指向EKEventEditViewController类型的属性的强指针。当我去提供控制器时,我重新分配/初始化控制器,它应该释放先前的参考正确吗?

@interface HZRunwayViewController ()
@property (strong, nonatomic) EKEventEditViewController *eventEditViewController;
@end


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.viewOptions.selectedSegmentIndex == 2) {
        if (indexPath.section == 0 && [self.eventsForCurrentDay count]) {
            id cell = [tableView cellForRowAtIndexPath:indexPath];
            if ([cell isKindOfClass:[HZEventTableViewCell class]]) {

                HZEventTableViewCell *eventCell = (HZEventTableViewCell *)cell;
                if (eventCell ) {
                    EKEvent *event = eventCell.event;
                    self.eventEditViewController = [[EKEventEditViewController alloc] init];
                    self.eventEditViewController.eventStore = self.calendarData.eventStore;
                    self.eventEditViewController.editViewDelegate = self;
                    self.eventEditViewController.event = event;
                    [self presentViewController:self.eventEditViewController animated:YES completion:nil];
                }
            }
        }
    }
}



- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action {
    [self updateDayLogic];
    [self dismissViewControllerAnimated:YES completion:nil];
}

作为旁注,我没有包含updateDayLogic方法,因为我用UIButton测试它,多次调用它,并且在几次调用后我的内存使用量仅增加了0.2mb。问题似乎源于EKEventEditViewController

1 个答案:

答案 0 :(得分:0)

所以,我修改了我的didSelectRowAtIndexPath方法,如下所示。我检查EKEventEditViewController是否为零,如果是,则初始化并设置它。如果已经实例化,则重新使用它。

我不确定为什么重新分配/初始化属性会导致内存增加。它应该自动释放内存,因为我的代码不再强烈指向视图控制器。无论哪种方式,我设法通过如下所示修复内存增加问题。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.viewOptions.selectedSegmentIndex == 2) {
        if (indexPath.section == 0 && [self.eventsForCurrentDay count]) {
            id cell = [tableView cellForRowAtIndexPath:indexPath];
            if ([cell isKindOfClass:[HZEventTableViewCell class]]) {

                HZEventTableViewCell *eventCell = (HZEventTableViewCell *)cell;
                if (eventCell ) {
                    EKEvent *event = eventCell.event;

                    // Check if the EKEventEditViewController is nil
                    if (!self.eventEditViewController) {
                        self.eventEditViewController = [[EKEventEditViewController alloc] init];
                        self.eventEditViewController.eventStore = self.calendarData.eventStore;
                        self.eventEditViewController.editViewDelegate = self;
                    }
                    self.eventEditViewController.event = event;
                    [self presentViewController:self.eventEditViewController animated:YES completion:nil];
                }
            }
        }
    }
}