我正在使用ARC和xCode 4.6,当我尝试访问.notes
的{{1}}属性以分配给EKEvent
中的字符串时,我收到内存泄漏。< / p>
有趣的是,在我切换任何单元格中的“付费/未付”按钮之前,泄漏永远不会出现,这个按钮不会调用cellForRowAtIndexPath
,尽管这两种方法都需要访问包含{my}数组的单例{1}}。
据仪器公司称,由于这条线路正在发生泄漏:
cellForRowAtIndexPath
EKEvents
是我在.h文件中声明的eventNotes = [NSString stringWithFormat:@"%@", [currentEvent notes]];
。
我已尝试使用eventNotes
并动态创建新的实例变量,但似乎没有任何效果:
ivar
列表继续,这是我的cellForRowAtIndexPathCode,泄漏发生在那里。 我对内存管理完全陌生,所以请!具有描述性。
ivar
}
答案 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
的属性。
希望这有助于将来......