我写了一个带有自定义搜索类的应用程序。这会构建一系列结果。
然后我将该数组分配到我的FirstViewController类中,并重新加载一个分配了结果数组的表视图
self.aResults = [thisSearch.aResults copy]
...
[[self searchResults] reloadData];
这样做之后不久,我发布 thisSearch
[thisSearch release];
这一切工作正常,并显示结果表,但是如果我向下滚动表并查看下面的行,它们都是空白的,那么当我向上滚动时,应用程序会在重新加载回收的表格单元格时崩溃。
之前没有发生这种情况,但我意识到我在泄漏记忆,所以我疯狂地 autorelease ,并在我的中添加了很多 autorelease 搜索类。但不是我的 FirstViewController 类。
因此,如果我使用复制,它是否实际上不会复制该对象,它是否会增加引用计数器?因此,当我销毁搜索时,我是否在那里销毁结果数组,因此破坏了FirstViewController尝试访问表视图的内容?
对不起,如果这没有多大意义,我今天感觉不太好。
答案 0 :(得分:1)
当你copy
个对象时(为了使对象必须符合NSCopying
协议,但NSArray
的情况就是如此),就好像你是init
首次使用预定值来实现它。
因此,您对release
的{{1}}个对象负责。
你必须做的事情:
copied
但我怀疑这会解决你的记忆问题。通过过度自动释放(并且仍在发布内容),您可能已经完全破坏了应用程序内存管理。
要尝试修复它,请尝试分析您的项目,看看会出现什么。
另外,我附上每月应该阅读的Apple Memory Management link,直到它成为第二天性。