【发布时间】:2011-09-14 20:23:23
【问题描述】:
我有一个问题,我不知道发生了什么
我有一个 tableview,我有一个名为 newsData 的属性。 我设置了一切并且工作正常! 然后在模拟器中我调用内存警告来查看应用程序是如何工作的。 我可以看到 tableview 正在被释放,当我回调 viewdidload 时,我可以看到这个数组现在是类 CALayerArray !!! 当我尝试访问它时,我的程序崩溃了!
发生了什么事? 感谢您的帮助。
【问题讨论】:
我有一个问题,我不知道发生了什么
我有一个 tableview,我有一个名为 newsData 的属性。 我设置了一切并且工作正常! 然后在模拟器中我调用内存警告来查看应用程序是如何工作的。 我可以看到 tableview 正在被释放,当我回调 viewdidload 时,我可以看到这个数组现在是类 CALayerArray !!! 当我尝试访问它时,我的程序崩溃了!
发生了什么事? 感谢您的帮助。
【问题讨论】:
您是否在 viewdidload 调用中重新分配了 tableview?在你发布它之后,你需要这样做。您可能希望在释放后将 tableView 设置为 nil,以避免崩溃(这仍然需要您在释放后重新分配和初始化 tableView!)
[tableView release];
tableView = nil;
澄清:我不是说,你释放后需要将任何对象设置为零!但是在释放它之后,你应该知道这个对象已经被释放了!
【讨论】:
这有很多可能的原因,具体取决于代码。首先,当您说“我有一个 tableview 并且我有一个名为 newsData 的属性”时,我感到很困惑。 newsData 属于什么对象?您是 UITableView 的子类,还是您的意思是这是您的 UITableViewDataSource 的一个 ivar?
newsData 是什么?这听起来应该是NSData,但你是说它是NSArray?
您应该首先审核您分配newsData 的所有位置。在大多数情况下,我会说您将其分配给不返回NSArray 的东西。我怀疑在这种情况下,因为CALayerArray 是私有的。这看起来更像是您正在访问用于其他用途的内存。我会检查你的内存警告代码和viewDidUnload: 代码,然后运行静态分析器作为开始。
【讨论】: