如果我有一个垃圾收集器跟踪分配的每个对象并在它们不再具有可用的引用时立即解除分配它们你是否还会有内存泄漏?
考虑到内存泄漏是没有任何参考的分配是不是不可能或我错过了什么?
编辑:所以我在计算内存泄漏的是分配,你在代码中不再有任何引用.您仍然参考的大量累积分配不是我在这里考虑的泄漏.
我也只是谈论普通的GC技术,它已经有一段时间了,但是我知道像周期性参考这样的情况不会让它们绊倒.我不需要任何语言的具体答案,这只是来自我与朋友的对话.我们谈论的是Actionscript和Java,但我并不关心那些特定的答案.
编辑2:从它的声音,似乎没有任何理由代码完全失去引用分配的能力,并没有GC能够拿起它,但我还在等待更多的权衡.
我有一个稍微大的功能(大约80行代码没有注释),我正在优化.
作为试图让剖析器为我工作的一部分,我拿了2块代码并将它们放在单独的函数中(这应该是暂时的,直到我可以把它们放回去).
有趣的部分是:我的测试用例耗时29.8秒
我将第一个块放入一个单独的函数后,我看到由于函数调用开销导致的性能损失很小.(30.2秒)当我将第二块代码放入一个单独的函数中时,我获得了相当大的性能提升,降至24.2秒
第二块代码是插入到一个相当大的链表中,我打算用二叉树或其他东西替换,但这20%的改进对我来说相当混乱.
tl; dr:尝试优化代码并注意到将代码块放入单独的函数中会使性能提高20%.怎么可能?
编辑:确认在发布版本中运行
我正在处理一些我无法联系原始开发人员的代码.
他将一个类的引用传递给另一个类的串行调度队列,我没有看到任何目的,不只是创建另一个调度队列(每个类都是一个单例).
这不是创造问题,但我想进一步理解,所以对正面影响的任何见解都表示赞赏,谢谢.
编辑:我建议在这里阅读所有答案,他们解释了很多.
NSArray * songs = [[NSArray alloc] initWithArray:[[MPMediaQuery songsQuery] collections]];
for (MPMediaItemCollection * item in songs){
NSString * persistentID = [[[item representativeItem] valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
// Do something with it.
???
}
Run Code Online (Sandbox Code Playgroud)
一旦我有MPMediaItemPropertyPersistentID,我如何播放歌曲?