gpt4 book ai didi

objective-c - 为什么我的字典在 NSArray 中发布?

转载 作者:行者123 更新时间:2023-11-29 11:20:18 25 4
gpt4 key购买 nike

我有一个 tableviewcontroller,它将字典对象存储在一个数组中,当一行被选中时,我将一个新的 View Controller 推送到导航堆栈上,并将数组中的字典对象传递到它的初始化程序中,字典对象将被保留在新 View Controller 的属性中。当我返回到我的 tableviewcontroller 时,我在 View Controller 的 dealloc 中释放了字典对象。但是当我在我的 tableviewcontroller 中向下/向后滚动时,传递给 View Controller 的字典在 tableviewcontroller 的数组中被释放,并且程序崩溃并显示消息:

BreakdanceSource[1351:607] * 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类与键标题的键值编码不兼容。”

当我从 View Controller 的 dealloc 函数中删除 [dictionary release] 时,程序可以运行并且不会崩溃!这很奇怪,因为我认为该数组还保留其对象的所有权,因此不应该释放字典。

为什么我不能在我的 View Controller 中释放字典对象? (我已经删除了 dealloc 中的 [dictionary release] 现在程序可以运行但是我不会有内存泄漏吗?)

到目前为止我已经试过了!

imageshack.us/photo/my-images/813/screenshot20110926at610.png 我使用了僵尸工具,这是我的结果!我没有得到的是,在我的 View Controller 的 dealloc 之前,保留计数是 1,应该是 2。因为 tableviewcontroller 中的数组应该拥有字典,而我的 View Controller 中有一个属性是 @属性(保留)NSDictionary* 媒体。我不知道我的字典在哪里发布,因为现在它只在 View Controller 的 dealloc 中发布

我还尝试将属性 @property (retain) 更改为 @property NSDictionary* media 然后我使用 media = [infoDictionary retain] 并且它没有崩溃..我的属性 (retain) 没有保留它吗?

最佳答案

NSMutableArray 增加添加到它的对象的保留计数,并相应地减少 NSMutableArray 被释放时的保留计数。这并不能阻止其他东西将保留计数递减到对象释放点。因此,必须有另一个对象的释放/自动释放。

使用 Instruments Allocation 工具,设置保留计数选项,找到对象,您将看到额外释放发生的位置。参见 this SO answer有关以这种方式使用 Instruments 的信息。

关于objective-c - 为什么我的字典在 NSArray 中发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com