Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么我的字典是以非官方形式发行的?_Objective C_Ios_Memory Management_Dictionary - Fatal编程技术网

Objective c 为什么我的字典是以非官方形式发行的?

Objective c 为什么我的字典是以非官方形式发行的?,objective-c,ios,memory-management,dictionary,Objective C,Ios,Memory Management,Dictionary,我有一个tableviewcontroller,它将字典对象存储在一个数组中,当选中一行时,我在导航堆栈上推一个新的视图控制器,并在其初始值设定项中从数组传递一个字典对象,字典对象将保留在新视图控制器的属性中。当我返回到我的tableviewcontroller时,我在视图控制器的dealloc中释放dictionary对象。但当我在tableviewcontroller中向下/向后滚动时,传递给视图控制器的字典将在tableviewcontroller的数组中解除分配,程序将崩溃,并显示以下消

我有一个tableviewcontroller,它将字典对象存储在一个数组中,当选中一行时,我在导航堆栈上推一个新的视图控制器,并在其初始值设定项中从数组传递一个字典对象,字典对象将保留在新视图控制器的属性中。当我返回到我的tableviewcontroller时,我在视图控制器的dealloc中释放dictionary对象。但当我在tableviewcontroller中向下/向后滚动时,传递给视图控制器的字典将在tableviewcontroller的数组中解除分配,程序将崩溃,并显示以下消息:

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

当我从视图控制器的dealloc函数中删除[dictionary release]时,程序运行正常,不会崩溃!这很奇怪,因为我认为数组还保留其对象的所有权,所以字典不应该被解除分配

为什么我不能在视图控制器中释放dictionary对象?(我已经删除了Dealoc中的[dictionary release],程序可以运行,但我不会有内存泄漏吗?)

我已经试过了!:

imageshack.us/photo/my-images/813/screenshot20110926at610.png我使用了僵尸工具,这是我的结果!我不明白的是,在我的视图控制器解除锁定之前,保留计数是1,应该是2。因为tableviewcontroller中的数组应该拥有字典,而我的视图控制器中有一个属性@property(retain)NSDictionary*media。我不知道我的字典在哪里发布,因为现在它只在视图控制器的dealloc中发布


我还尝试将属性@property(retain)更改为@property NSDictionary*media,然后使用media=[infoDictionary retain],它不会崩溃。。我的财产(保留)没有保留吗

Yes
NSMutableArray
增加添加到其中的对象的保留计数,并在释放
NSMutableArray
时相应减少保留计数。这不会阻止其他操作将保留计数减少到对象释放的点。因此,必须有另一个对象的释放/自动释放


使用Instruments Allocation tool,设置retain count(保留计数)选项,找到该对象,您将看到额外释放发生的位置。有关以这种方式使用仪器的信息,请参见。

NSMutableArray
增加添加到其中的对象的保留计数,并在释放
NSMutableArray
时相应减少保留计数。这不会阻止其他操作将保留计数减少到对象释放的点。因此,必须有另一个对象的释放/自动释放


使用Instruments Allocation tool,设置retain count(保留计数)选项,找到该对象,您将看到额外释放发生的位置。有关以这种方式使用仪器的信息,请参阅。

您使用什么函数从阵列中获取条目?如果它是removeObjectAtIndes vs objectAtIndex,例如,您显然将从数组中删除字典。但更可能的是,您只是在以某种方式进行双重发布;所以阵列不应该释放这个东西!您使用什么函数从数组中获取条目?如果它是removeObjectAtIndes vs objectAtIndex,例如,您显然将从数组中删除字典。但更可能的是,您只是在以某种方式进行双重发布;所以阵列不应该释放这个东西!我使用了僵尸工具,这是我的结果!我不明白的是,在我的视图控制器解除锁定之前,保留计数是1,应该是2。因为tableviewcontroller中的数组应该拥有字典,而我的视图控制器中有一个属性@property(retain)NSDictionary*media。我不知道我的字典在哪里发布,因为现在它只在视图控制器的dealloc中发布。我使用了僵尸工具,这是我的结果!我不明白的是,在我的视图控制器解除锁定之前,保留计数是1,应该是2。因为tableviewcontroller中的数组应该拥有字典,而我的视图控制器中有一个属性@property(retain)NSDictionary*media。我不知道我的字典在哪里发布,因为现在它只在视图控制器的dealloc中发布。