我的应用程序是书本式的,共有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
上实时创建字典而不是从存档中读取字典来消除我的泄密。但我仍然很好奇为什么这种行为归因于字符串与字符串。