【发布时间】:2011-12-15 02:12:33
【问题描述】:
我知道这个问题可能听起来很愚蠢,但请耐心等待。我构建了一个应用程序来帮助新开发人员了解 iPhone 上的内存保留(还没有 ARC)。它简单明了,4 个按钮,init、access、retain 和 release。很不言自明。我正在显示作为我们戳和刺激目标的字符串对象的保留计数。 (请不要讲[myVar retainCount]的使用,我已经知道了)
这些东西永远不会变成实际的应用程序,只是为了好玩而玩弄它,希望能帮助人们了解记忆的工作原理。我的保留和释放都很好。我的问题是,如果我调用 myString = [[NSMutableString alloc] init]; 为什么我的保留计数会回落到 1?再次。我可以将保留计数提高到 40,但在调用 alloc/init 后我又回到零。我没有在任何地方泄漏,只是好奇如果/当再次调用 alloc/init 时 myString 会发生什么。
【问题讨论】:
-
显示保留计数,即使在这种有限的上下文中,也会产生误导。如果您确实将使用限制在保留计数准确且易于理解的程度,那么您的范围已经如此有限,以至于它不再代表现实世界的内存管理。在使用真正的应用程序时,您的学生可能从这个应用程序中学到的任何东西都将毫无用处。
-
显然您没有阅读问题,“请不要使用 [myVar retainCount]。”
-
@morningstar - 在 bbum 附近使用
-retainCount就像在公牛面前挥舞红旗。 -
@morningstar 这个问题本身与retainCount 没有任何关系,而将retainCount 纳入其中的事实表明,Bill 对一些非常基本的东西缺乏了解(没有批评的意图——我们都从那里开始)。如果您注意到,我的回答实际上并没有提到
retainCount,直到新部分的最后一段。至于评论,嗯,这是评论……不是答案。 -
即使你完全理解
retainCount以及它为什么会产生误导,用它来教你的学生也会让他们知道retainCount是对学习和/或调试有用。最好删除应用程序中的retainCount显示,并在您按下按钮时使用 Instruments 实时查看对象的历史记录:然后您教他们一种有用的调试技术,而不是含蓄地教他们使用retainCount。
标签: iphone objective-c ios memory-management