内存泄漏与NSAttributedStrings

时间:2016-07-12 23:53:50

标签: ios swift memory-leaks nsattributedstring

我的应用程序是书本式的,共有77章,每章由几页组成。在每个页面上,文本显示在UITextView中。其数据存储在[String: [NSAttrubutedString]]类型的字典中。键是章节,与每章相关的数组元素是该章中每页的字符串。

应用程序首次启动时,仪器显示1800个内存泄漏附近。我有时会在访问其他页面时看到1到17个泄漏,但这种情况很少且不可预测。 1800变化,只出现一次。使用非归属String时,我没有遇到过这样的问题。我也可以补充一点,这是我对属性字符串的第一次体验。

每个泄漏的一个例子(大小是该类型的总数):
    * Malloc / [NSConcreteMutableAttributedString replaceCharactersInRange:withString:] / 171 kB
    * Malloc 80字节/ - [NSRLEArray_makeNewListFrom:] 17 kB
    * _NSCFString / - [NSPlaceholderMutableString init] 23 kB
    * Malloc / [NSMutableRLEArray_setBlockCapacity:] / 25 kB
    * NSConcreteMutableAttributedString / _decodeObjectBinary 12 kB

虽然我使用可变版本来形成我的字符串,但我将它们作为非可变NSAttributedString版本插入到数组中。数组字典存档为plist,然后在启动应用程序时读入相同类型的字典。我认为这可能是问题但尝试直接从存档中读取产生了相同的泄漏。我不知道为什么被泄露的物体看起来像是可变的。

我不确定哪些代码(如果有的话)会对您有所帮助,请告诉我。

编辑:我已使用数组[[NSAttributedString]]替换了字典,但仍然存在同样的问题。泄漏的类别中至少有三个似乎与相同的字符串相关,每个泄漏的数量大致相同。

编辑:我通过在viewDidLoad上实时创建字典而不是从存档中读取字典来消除我的泄密。但我仍然很好奇为什么这种行为归因于字符串与字符串。

0 个答案:

没有答案