我正在使用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
答案 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];
}
}
}
}
}