【问题标题】:NSArray to CALayerArrayNSArray 到 CALayerArray
【发布时间】:2011-09-14 20:23:23
【问题描述】:

我有一个问题,我不知道发生了什么

我有一个 tableview,我有一个名为 newsData 的属性。 我设置了一切并且工作正常! 然后在模拟器中我调用内存警告来查看应用程序是如何工作的。 我可以看到 tableview 正在被释放,当我回调 viewdidload 时,我可以看到这个数组现在是类 CALayerArray !!! 当我尝试访问它时,我的程序崩溃了!

发生了什么事? 感谢您的帮助。

【问题讨论】:

    标签: iphone memory nsarray


    【解决方案1】:

    您是否在 viewdidload 调用中重新分配了 tableview?在你发布它之后,你需要这样做。您可能希望在释放后将 tableView 设置为 nil,以避免崩溃(这仍然需要您在释放后重新分配和初始化 tableView!)

     [tableView release];
     tableView = nil;
    

    澄清:我不是说,你释放后需要将任何对象设置为零!但是在释放它之后,你应该知道这个对象已经被释放了!

    【讨论】:

    • 我不建议将所有已发布的对象默认设置为 nil。不将其设置为 nil 的好处是,如果您尝试引用此已发布对象,您的应用程序会崩溃。如果您将其设置为 nil,它不会崩溃,但仍然无法正常工作。这使得故障排除相当困难。
    • 我认为我们在某种程度上都是正确的。不需要设置 nil。如果您释放该对象,则无论如何您都不应该再使用它。如果你仍然想使用它,你应该考虑你的代码。
    • 我完全同意。我只是想避免@auslander 自动将每个释放的对象设置为零。
    • 查看 MCRelease 以获得正确的妥协 IMO。 iphonedevelopment.blogspot.com/2010/09/dealloc.html
    • 感谢有关 nil 的提示。我没有释放 tableview,我在控制器中有一个 NSArray。当我在 sim 中模拟内存警告时,自动释放 tableview 控制器。之后我拥有的数组是 CALayerArray!!!当我尝试再次设置值时,它崩溃了!
    【解决方案2】:

    这有很多可能的原因,具体取决于代码。首先,当您说“我有一个 tableview 并且我有一个名为 newsData 的属性”时,我感到很困惑。 newsData 属于什么对象?您是 UITableView 的子类,还是您的意思是这是您的 UITableViewDataSource 的一个 ivar?

    newsData 是什么?这听起来应该是NSData,但你是说它是NSArray

    您应该首先审核您分配newsData 的所有位置。在大多数情况下,我会说您将其分配给不返回NSArray 的东西。我怀疑在这种情况下,因为CALayerArray 是私有的。这看起来更像是您正在访问用于其他用途的内存。我会检查你的内存警告代码和viewDidUnload: 代码,然后运行静态分析器作为开始。

    【讨论】:

    • 很抱歉给您带来了困惑。我有一个 tableview 控制器,那里有 NSArray newsData 保存对象。我的主要代码工作正常!没有泄漏,一切都很好,很顺利。问题是在我触发内存警告之后。之后,newsData 属于 CALayerArray 类。当我尝试访问它时它崩溃了!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2011-01-17
    • 2016-03-03
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多