访问[EKEvent备注]时,cellForRowAtIndexPath中的ARC内存泄漏

时间:2013-02-02 01:18:04

标签: ios memory-leaks nsstring ekevent

我正在使用ARC和xCode 4.6,当我尝试访问.notes的{​​{1}}属性以分配给EKEvent中的字符串时,我收到内存泄漏。< / p>

有趣的是,在我切换任何单元格中的“付费/未付”按钮之前,泄漏永远不会出现,这个按钮不会调用cellForRowAtIndexPath,尽管这两种方法都需要访问包含{my}数组的单例{1}}。

据仪器公司称,由于这条线路正在发生泄漏:

cellForRowAtIndexPath

enter image description here

EKEvents是我在.h文件中声明的eventNotes = [NSString stringWithFormat:@"%@", [currentEvent notes]];

我已尝试使用eventNotes并动态创建新的实例变量,但似乎没有任何效果:

ivar

列表继续,这是我的cellForRowAtIndexPathCode,泄漏发生在那里。 我对内存管理完全陌生,所以请!具有描述性。

ivar

}

1 个答案:

答案 0 :(得分:0)

当从EKEvents数组访问EKEvent对象时,解决方案是强制转换(EKEvent *)。

我从日历中获取了事件并将其存储在名为NSMutableArray的{​​{1}}中(这是单例类的属性)。

当访问数组中的事件时,我不得不使用强制转换来防止因某些原因导致内存泄漏。所以而不是:

lastYearsUTAEvents

我将对象转换为(EKEvent *),同时从数组中取出它,现在没有任何泄漏。 (我还将前两行代码优化为1):

 NSMutableArray *currentArray = [sharedEventData.lastYearsUTAEvents objectAtIndex:indexPath.section];
 EKEvent *currentEvent = [currentArray objectAtIndex:indexPath.row];

起初,我甚至对能够更改EKEvent *currentEvent = (EKEvent *)[[sharedEventData.thisYearsUTAEvents objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 属性感到困惑,因为在documentation中,它是.notes,而不是NSString,所以我假设你保存一个EKEvent(或者,在我的情况下,编辑一个)它保存在现有的一个,因为没有用于保存事件的替换方法。仅保存和删除。

除了所有混淆之外,NSMutableString甚至不是.notes的属性。这是EKCalendarItem的属性。

希望这有助于将来......