我正在 AppleTV 上进行开发,并且我有一个下载海报的线程。
在我的第一个版本中,我使用 [NSData dataWithContentsOfURL:...] 来执行此操作,尽管没有内存泄漏,但系统内存很快就会耗尽。
然后我转向 coneybeare 在这篇memory-leak-problem-using-nsdata-in-iphone 中推荐的 ASIHTTPRequest
事情变得更好,但仍然没有记忆。
奇怪的是,我的进程的常驻内存非常低且稳定,但系统的可用内存却越来越少。
这是 vm_stat 的输出:
Apple TV:/var/log root# vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 1012.
Pages active: 22735.
Pages inactive: 11178.
Pages wired down: 16069.
"Translation faults": 600863.
Pages copy-on-write: 21787.
Pages zero filled: 559108.
Pages reactivated: 2922.
Pageins: 15073.
Pageouts: 11.
Object cache: 4 hits of 7781 lookups (0% hit rate)
Apple TV:/var/log root# vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 973.
Pages active: 4568.
Pages inactive: 11067.
Pages wired down: 16076.
"Translation faults": 602533.
Pages copy-on-write: 21881.
Pages zero filled: 559767.
Pages reactivated: 3529.
Pageins: 15087.
Pageouts: 11.
Object cache: 4 hits of 7784 lookups (0% hit rate)
这两个输出随后在很短的时间内得到。请注意“Pages active:”,大约有 18k 个页面消失了。他们去哪儿了?
PS。我在CoreGraphics和VideoToolBox中也发现了类似的问题,就是系统好像会占用很多内存,不释放。CoreAnimation 和 VideoToolBox 有缓存吗?如果是,我该如何清除这些缓存?
一些更新: 1)它似乎与 BRMarqueeTextControl 相关,我认为它是基于 CoreAnimation 的文本控件。
2)单独使用BRMarqueeTextControl不会导致内存问题,单独使用海报下载作业也不会。
3)当这两者结合在一起时,内存很快就会耗尽。