0

我正在使用的一个实例,EKEventEditViewController所以我可以编辑一个选定的事件。当控制器通过关闭时,eventEditViewController:didCompleteWithAction:我注意到我的内存使用量没有下降。以后每次使用 EventEditViewController 都会增加我的内存使用量,而且它永远不会下降。我的应用开始使用了 4.2mb 的内存。如果我所做的只是在我的表格视图中选择一个单元格,呈现事件编辑控制器,关闭事件编辑控制器并多次重复该过程,那么我设备上使用的内存量将增加到 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

4

1 回答 1

0

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

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

- (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];
                }
            }
        }
    }
}
于 2013-08-10T22:23:02.497 回答